別の 2 つの配列の値とキーに基づいてネストされた配列を返し、3 番目の値を最も深いキーに割り当てる関数を作成しました (コードで意味があることを願っています)。
function myfunc_build_array($mydata,$keys,$value)
{
$newarr=array();
foreach ($mydata as $data)
{
$evalvar='$newarr';
foreach ($keys as $key)
{
$evalvar.="['".$data[$key]."']";
}
$evalvar.='=$value;';
eval($evalvar);
}
return $newarr;
}
つまり、次の場合:
$mydata=array(
0=>array('section'=>'NS1','subsection'=>'NS1A','employee'=>'2812','name'=>'Bob'),
1=>array('section'=>'NS1','subsection'=>'NS1A','employee'=>'2811','name'=>'Bib'),
2=>array('section'=>'NS1','subsection'=>'NS1B','employee'=>'2718','name'=>'Bub'),
);
$keys= array('section','subsection','employee');
myfunc_build_array($mydata,$keys,"active"); の結果 は:
array(1) {
["NS1"]=>
array(2) {
["NS1A"]=>
array(2) {
[2812]=>
string(6) "active"
[2811]=>
string(6) "active"
}
["NS1B"]=>
array(1) {
[2718]=>
string(6) "active"
}
}
}
それは正常に動作しますが、私は通常 eval() の使用を避けているため、よりエレガントで高速な、より良い方法があるかどうか疑問に思っていました。