全て、
次の配列と関数があり、指定した配列キーに基づいて多次元配列を作成します。関数に渡す属性ごとに、別の次元が配列に追加されます。配列のソートと考えてください。
提供された関数はうまく機能しますが、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
)
)
)
)
質問: 同じ配列から同じ結果を得るために上記を克服する方法は何ですか? 他の人がそれをどのように行うかを知りたいです。
ありがとう