Все,Динамически Populating Многомерные массивы
У меня есть следующий массив и функция, которая будет создавать многомерный массив, основанный на том, что вам определенном ключе массива. Для каждого атрибута, который вы передаете функции, он добавит другое измерение в массив. Подумайте об этом как о сортировке массива.
Поставляемая функция отлично работает, но использует eval, мне было трудно найти подходящую функцию, которая не допускала ошибок без нее.
Начнем с массива:
$array = array(
array(‘name’ => ‘Person1’, ‘username’ => ‘username1’, ‘join_date’ => 12233445566, ‘state’ => ‘NJ’),
array(‘name’ => ‘Person2’, ‘username’ => ‘username2’, ‘join_date’ => 12233445566, ‘state’ => ‘NJ’),
array(‘name’ => ‘Person3’, ‘username’ => ‘username3’, ‘join_date’ => 12233445996, ‘state’ => ‘NY’),
array(‘name’ => ‘Person4’, ‘username’ => ‘username4’, ‘join_date’ => 12233445996, ‘state’ => ‘NJ’),
array(‘name’ => ‘Person5’, ‘username’ => ‘username5’, ‘join_date’ => 12233445566, ‘state’ => ‘NJ’),
array(‘name’ => ‘Person6’, ‘username’ => ‘username6’, ‘join_date’ => 12233445566, ‘state’ => ‘NY’),
array(‘name’ => ‘Person7’, ‘username’ => ‘username7’, ‘join_date’ => 12233445776, ‘state’ => ‘NY’),
array(‘name’ => ‘Person8’, ‘username’ => ‘username8’, ‘join_date’ => 12233445566, ‘state’ => ‘NY’),
array(‘name’ => ‘Person9’, ‘username’ => ‘username9’, ‘join_date’ => 12233445996, ‘state’ => ‘NJ’),
);
Вот пример функции:
function createIndex($array, $index){
$index_array = array();
foreach($array as $result){
if(is_array($index)){
$key = '$index_array';
for($i=0;$i<=sizeof($index)-1;$i++){
$key .= "['{$result[$index[$i]]}']";
}
$key .= "[]";
eval("$key = \$result;");
}
else{
$index_array[$result[$index]] = $result;
}
}
return $index_array;
}
Призвание функция:
print_r(create_index($array, array(‘state’, ‘join_date’)));
Нужный выход:
Array
(
[NJ] => Array
(
[12233445566] => Array
(
[0] => Array
(
[name] => Person1
[username] => username1
[join_date] => 12233445566
[state] => NJ
)
[1] => Array
(
[name] => Person2
[username] => username2
[join_date] => 12233445566
[state] => NJ
)
[2] => Array
(
[name] => Person5
[username] => username5
[join_date] => 12233445566
[state] => NJ
)
)
[12233445996] => Array
(
[0] => Array
(
[name] => Person4
[username] => username4
[join_date] => 12233445996
[state] => NJ
)
[1] => Array
(
[name] => Person9
[username] => username9
[join_date] => 12233445996
[state] => NJ
)
)
)
[NY] => Array
(
[12233445996] => Array
(
[0] => Array
(
[name] => Person3
[username] => username3
[join_date] => 12233445996
[state] => NY
)
)
[12233445566] => Array
(
[0] => Array
(
[name] => Person6
[username] => username6
[join_date] => 12233445566
[state] => NY
)
[1] => Array
(
[name] => Person8
[username] => username8
[join_date] => 12233445566
[state] => NY
)
)
[12233445776] => Array
(
[0] => Array
(
[name] => Person7
[username] => username7
[join_date] => 12233445776
[state] => NY
)
)
)
)
Вопрос: Какими способами вы побеждаете выше, чтобы получить одинаковые результаты из одного массива? Мне любопытно посмотреть, как это сделают другие.
Thanks
Возможно, вы захотите использовать более богатую структуру данных. Основная проблема заключается в том, что у вас нет надежного способа провести различие между списком (числовыми, последовательными индексами, начинающимися с 0), и ключами, которые представляют собой столбец, с которым вы сформировали группы. Вы могли бы понять это, глядя на глубину ... но я думаю, что это становится уродливым. Я предполагаю, что простым решением было бы префикс всех ключей с строкой, кроме истинных числовых. – goat