Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 2
1

PHP проверка одинаковых значений в цикле

01.12.2015, 16:54. Показов 1162. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Есть некоторый динамически формирующийся массив (его пример на рисунке). Мне нужно выстроить в строку последовательность псевдонимов по рангу (ранг берется из MySQL и сортируется с помощью ORDER BY). Делаю так

PHP
1
2
3
4
5
$result_string = "";
    foreach ($sequnce as $key => $value) {    
        $result_string .= $value['psevdonim'] . ", ";
    }
    $result_string = substr($result_string, 0, -2);
Результат такой: Z1, Z2, Z4, Z3, Z5

Но проблема, в данном случае 1 и 2 ранги равны, должно быть вот так: (Z1 - Z2), Z4, Z3, Z5
Как сделать эту проверку? Причем, может быть такая ситуация, что ранг у всех элементов равен, тогда так должно быть: (Z1 - Z2 - Z3 - Z4 - Z5)
Миниатюры
PHP проверка одинаковых значений в цикле  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2015, 16:54
Ответы с готовыми решениями:

php+mysql проверка одинаковых имен\или существующую запись
Доброе время суток! Ребят, помогите пожалуйста. Есть код, но как сделать проверку на существующую...

Проверка в цикле for
Набиваю руку решая задачи, попалась одна задача, несложная, понял как ее решить циклом for, но я...

Проверка IP в цикле
Кто нибудь может пояснить как осуществить цикл для проверки определённого диапозона IP адресов. Ну...

Двойная проверка в цикле for
Как в Сшарпе сделать двойную проверку условия выполнения? Так не проходит: for (int i = 0, j =...

4
451 / 417 / 115
Регистрация: 15.02.2012
Сообщений: 1,847
01.12.2015, 18:32 2
так?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$sequnce=array(
    array("rang"=>"3","psevdonim"=>"Z1"),
    array("rang"=>"1","psevdonim"=>"Z2"),
    array("rang"=>"1","psevdonim"=>"Z3"),
    array("rang"=>"2","psevdonim"=>"Z4"),
);
 
$arnew=array();
 
foreach ($sequnce as $key => $value) {    
    $arnew[$value["rang"]][]=$value['psevdonim'];
}
$str="";
$k=0;
foreach($arnew as $key=>$value){
    if($k>0) $str.=", ";
    if (count($value)>1){
        $str.="(".implode(", ",$value).")";
    }else{
        $str.=$value[0];
    }
$k++;
}
echo $str;
1
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
01.12.2015, 18:38 3
Вот так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$sequnce = array(
    0 => array('rang'=>1,'psevdonim'=>'Z1'),
    1 => array('rang'=>2,'psevdonim'=>'Z2'),
    2 => array('rang'=>3,'psevdonim'=>'Z3'),
    3 => array('rang'=>4,'psevdonim'=>'Z4'),
    4 => array('rang'=>3,'psevdonim'=>'Z5'),
    5 => array('rang'=>3,'psevdonim'=>'Z6')
);
$result_string = "";
$i = 0;
foreach ($sequnce as $key=>$item) {
    if (strpos($result_string,$item['psevdonim']) !== false) continue;
    if ($i++ > 0) $result_string .= ", ";
    $concat_by_rang = $item['psevdonim'];
    foreach ($sequnce as $key2=>$item2) {
        if (($item['rang'] == $item2['rang']) && ($item['psevdonim'] != $item2['psevdonim']))
        {
            $concat_by_rang .= " - ".$item2['psevdonim'];
        }
    }
    if (strpos($concat_by_rang,'-')) $concat_by_rang = "(".$concat_by_rang.")";
    $result_string .= $concat_by_rang;
}
 
echo $result_string;
1
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
01.12.2015, 23:00 4
tonikhristev,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$sequnce = array(
    array('rang' => 1, 'psevdonim' => 'Z1'),
    array('rang' => 2, 'psevdonim' => 'Z2'),
    array('rang' => 3, 'psevdonim' => 'Z3'),
    array('rang' => 4, 'psevdonim' => 'Z4'),
    array('rang' => 3, 'psevdonim' => 'Z5'),
    array('rang' => 3, 'psevdonim' => 'Z6')
);
 
array_multisort(array_map(function($row) {
    return $row['rang'];
}, $sequnce), SORT_ASC, $sequnce);
 
$arResult = array(); $arUseRang = array();
foreach($sequnce as $row) {
    if (!in_array($row['rang'], $arUseRang))
        $arUseRang[] = $row['rang'];
    else continue;
    $arFormat = array_map(function ($row) {
        return $row['psevdonim'];
    }, array_filter($sequnce, function($row) use ($arUseRang) {
        return $row['rang'] == end($arUseRang);
    }));
    $arResult[] = count($arFormat) > 1 ? '(' . implode("\040-\040", $arFormat) . ')' : array_shift($arFormat);
};
$strResult = implode(",\040", $arResult);
 
echo $strResult;
Z1, Z2, (Z3 - Z5 - Z6), Z4
1
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 2
02.12.2015, 01:12  [ТС] 5
Спасибо Вам всем ребят за помощь))
0
02.12.2015, 01:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2015, 01:12
Помогаю со студенческими работами здесь

Проверка процесса в цикле while
Есть 2 процесса игры которые я хочу чекать на запуск: var GameProcess = new { "PB", "PointBlank"...

Проверка условия в цикле for
Подскажите, пожалуйста, сколько раз вычисляется значение выражения n - 1 в цикле for. Это...

Проверка условия в цикле
Добрый день, ситуация такая попробую в кратце описать: for($d = 0; $d < $served_count;...

Проверка одинаковых логинов в БД
Строка 42. Пытаюсь таким образом проверить, если логин такой в БД. В такой иторпритации меньше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru