[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Универсальное формирование массива
Diana95
Здравствуйте, нужна помощь в задании на массивы, дан массив вида:
$array= array(
0=>array("name"=>"Ivan", 'id'=>5, 'city' => 'Piter'),
1=>array("name"=>"Ivan", 'id'=>10, 'city' => 'Moscow'),
2=>array("name"=>"Sergei", 'id'=>3, 'city' => 'Piter'),
3=>array("name"=>"Ivan", 'id'=>4, 'city' => 'Piter'));
<?php
function
resort($array, $key){
$res = array();
foreach($array as $el){
// if($el[$key] == $el[$key])
$res[$el[$key]][] = $el;
}
return isset($res) ? $res : false;
}
$array= array(
0=>array("name"=>"Ivan", 'id'=>5, 'city' => 'Piter'),
1=>array("name"=>"Ivan", 'id'=>10, 'city' => 'Moscow'),
2=>array("name"=>"Sergei", 'id'=>3, 'city' => 'Piter'),
3=>array("name"=>"Ivan", 'id'=>4, 'city' => 'Piter'));
$key = array('city','name'); //вот собственно форма по которой будет идти группировка
$res=resort($array, 'name');
function myCmp($a, $b) {
if ($a['id'] === $b['id']) return 0;
return $a['id'] > $b['id'] ? 1 : -1;
}
foreach($res as &$value){
uasort($value, 'myCmp');
}
echo '<pre>' . print_r($res,1) . '</pre>';
?>


И если я задаю $key = array('city','name');, то должен отсортировать сначала по городам, например, Piter следом всех по именам, т.е. все Ivan и Sergei, которые в этом городе живут и там lдалее, как видите у меня реализована только группировка по 1 полю, которое я укажу тут - $res=resort($array, 'name');, поэтому как бы просто ещё один уровень добавился. НО! надо придумать, чтобы программа при дальнейших добавлениях новых полей снова формировалась не только как сейчас 2-х уровневый, т.е. была универсальной.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.