我很可能这样做太复杂了。但我需要将多个数组转换为多维数组键。所以像这样的数组:
Array //$original
(
[0] => 500034
[1] => 500035 //these values need to become
//consecutive keys, in order of array
)
需要成为:
Array
(
[50034][50035] => array()
)
这需要递归地完成,因为它可能还需要它变得更深:
Array
(
[50034][50036][50126] => array() //notice that the numbers
//aren't necessarily consecutive, though they are
//in the order of the original array
)
我目前的代码:
$new_array = array();
foreach($original as $k => $v){ //$original from first code
if((gettype($v) === 'string' || gettype($v) === 'integer')
&& !array_key_exists($v, $original)){ //check so as to not have illigal offset types
$new_array =& $original[array_search($v, $original)];
echo 'In loop: <br />';
var_dump($new_array);
echo '<br />';
}
}
echo "After loop <br />";
var_dump($new_array);
echo "</pre><br />";
给我:
In loop:
int(500032)
In loop:
int(500033)
After loop
int(500033)
使用此代码$new_array =& $original[array_search($v, $original)];
我期望After循环:$new_array[50034][50035] => array()
。
我做错了什么?现在已经好几个小时了:(
编辑回答“为什么”我正在尝试这样做 我正在从数据库中重建facebook数据。以下是我自己的个人数据,没有正确重建,这就是我需要回答上述问题的原因。
[500226] => Array
(
[own_id] =>
[entity] => Work
[name] => Office Products Depot
[500227] => Array
(
[own_id] => 500226
[entity] => Employer
[id] => 635872699779885
)
[id] => 646422765379085
)
[500227] => Array
(
[500228] => Array
(
[own_id] => 500227
[entity] => Position
[id] => 140103209354647
)
[name] => Junior Programmer
)
如您所见,ID [500227]
是[500226]
的子项,但是,由于我没有到子数组的路径,因此创建了一个新数组。当前的父母只能在第一级工作。
[own_id]
是一个键,其中值指示哪个其他键应该是其父键。这就是为什么第一个数组([500226]
)没有[own_id]
的值。
答案 0 :(得分:0)
如果您想以递归方式执行某些操作,请以递归方式执行此操作。我希望这就是你的意思。
public function pivotArray($array, $newArray)
{
$shifted = array_shift($array);
if( $shifted !== null )
{
return $this->pivotArray($array, array($shifted=>$newArray));
}
return $newArray;
}
$array = array(432, 432532, 564364);
$newArray = $this->pivotArray($array, array());
编辑:问题编辑后,它似乎不太相关。好吧,也许有人会觉得它很有用。