PHP-ники помогите решить, чет голова плохо сегодня работает

oleg1982

Новичок
Есть массив с данными:

Татьяна Можарова 119
Татьяна Можарова 151
татьяна ступина 158

Требуется сгруппировать массив, чтобы на выходе получилось:

Татьяна Можарова 119|151
татьяна ступина 158

Блин я понимаю что задача для первого класса, но кто может подправьте код:

$arr1 = $arr;
for ($i_=0; $i_<=count($arr1); $i_++) {
for ($i=1; $i<=count($arr); $i++) {
if ($arr1[$i_] == $arr[$i]) {
echo '<tr><td>', $arr1[$i]['fn'] ,'</td><td>', $arr1[$i]['ln'] ,'</td></tr>';
}
}
}
 

Hello

Новичок
PHP:
$in = 'Татьяна  Можарова     119
Татьяна Можарова     151
татьяна ступина  158';
preg_match_all('#(.*)\s(\d+)#iu', $in, $out);
А дальше через ассоциативный массив
 

oleg1982

Новичок
PHP:
$in = 'Татьяна  Можарова     119
Татьяна Можарова     151
татьяна ступина  158';
preg_match_all('#(.*)\s(\d+)#iu', $in, $out);
А дальше через ассоциативный массив
Так это у меня массив, а не шаблон который нужно искать.
В двух словах, надо в массиве сгруппировать одинаковые элементы. И номера заказов вывести в виде 119|151.
 

WMix

герр M:)ller
Партнер клуба
а может быть такое, что этот масив пришел из базы данных?
 

Тугай

Новичок
PHP:
$a = array(
 array ('fn' => 't1', 'ln' => 'n1'),
 array ('fn' => 't1', 'ln' => 'n2'),
 array ('fn' => 't2', 'ln' => 'n3'),
);

$b = array();
foreach( $a as $e ) {
  $b[$e['fn']] = isset($b[$e['fn']]) 
    ? $b[$e['fn']] . '|' . $e['ln']
	: $e['ln'];
}

print_r($b);
// Array ( [t1] => n1|n2 [t2] => n3 )
 

GoodLuck777

Новичок
скажи им чтобы вели себя хорошо, а если будут рыпаться удали парочку для профилактики
 

oleg1982

Новичок
PHP:
$a = array(
 array ('fn' => 't1', 'ln' => 'n1'),
 array ('fn' => 't1', 'ln' => 'n2'),
 array ('fn' => 't2', 'ln' => 'n3'),
);

Ой ой ой!!! Ну вы красавчик, сэнкс, получилось, вот результат:
Array ( [Гнутова] => 110 [Можарова] => 119|151 [ступина] => 158 [Лепехина] => 177|238|324|330|462|544 [Скачкова] => 179|386 [Коннова] => 187|320 [Иванова] => 260|355|455|615 [цыбуляк] => 349 [Логвина] => 392|617 [Журавлева] => 488 [Климанова] => 586 )
$b = array();
foreach( $a as $e ) {
  $b[$e['fn']] = isset($b[$e['fn']]) 
    ? $b[$e['fn']] . '|' . $e['ln']
	: $e['ln'];
}

print_r($b);
// Array ( [t1] => n1|n2 [t2] => n3 )
 

Вурдалак

Продвинутый новичок
PHP-ники помогите решить, чет голова плохо сегодня работает
Создание новых тем, имеющих малосодержательное название. Например, "Помогите!!...", "Есть вопрос", "почему-то не работает". Такие темы удаляются без предупреждений;
http://phpclub.ru/talk/threads/Правила-форумов.68451/
 

Вурдалак

Продвинутый новичок
GROUP_CONCAT подходит лишь для работы в консоли, когда нужно получить список, в реальном приложении это может вызвать баги, потому что там буфер ограниченный.
 

WMix

герр M:)ller
Партнер клуба
Вурдалак
пользуюсь активно, никогда не встречал, можно подробнее?
 

shureen

Милорд Лось Кристофер
http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_group-concat
The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet. The syntax to change the value of group_concat_max_len at runtime is as follows, where val is an unsigned integer:

SET [GLOBAL | SESSION] group_concat_max_len = val;
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Вопрос только в том, что предугадать хватит ли тебе увеличенного значения со временем - нельзя =( Сам как-то наступил на такие грабельки.
 

Тугай

Новичок
Не знаю куда еще это написать, но понравился пост WMix отсюда ссылка
И хотя я наверно нигода так не поступлю как в топике по ссылке, но я увидел красивую демнострацию того, что PHP - это динамический язык программирования.
Это в каком-то смысле касается этого топика, хотя и косвено.
Здесь тема переосла в обсуждеие group_concat - это тоже достаточно динамичная штука, надеюсь встреить или придумать нормальное обсужление того что дано появилось в php - а именно функторов.
Это никакая не ява или фреймворки это на самом деле офинегенная штука присущая чисто динамическим языкам. Хотя может я их и преоцениваю. :)
 

WMix

герр M:)ller
Партнер клуба
просто в запросе подобранны не правильные имена (я не знал как они зовутся), но 1024 символа это нужно набрать.
в любом случае спасиб за предупреждение, хорошо понимать где собака порылась, и использовать group_concat по назначению
мои результаты на врятли переходят 50 символов, групирую чаще статусы, сейчас к примеру счета по заказу. их чаще до 3х но бывает и 7.
Тугай
а по посту, как поступишь если не секрет
 

hell0w0rd

Продвинутый новичок
Тугай
функторы - это конструкция, которую реализовали во всех современных языках, в тч компилируемых, другое дело, что в php есть возможность управлять поведением во время исполнения, но это магия, которая так или иначе работает медленно
 
Сверху