很可能我这样做太复杂了。但是我需要将多个数组转换为多维数组键。所以数组是这样的:
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)];
我期望的 后循环:$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]
的值。
如果你想递
归地做某事,那就递归地做。我希望这就是你的本意。
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());
编辑:问题编辑后,它似乎不是很相关。好吧,也许无论如何有人会发现它很有用。