从标准数组创建多维数组


Create multidimensional array from standard array

很可能我这样做太复杂了。但是我需要将多个数组转换为多维数组键。所以数组是这样的:

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());

编辑:问题编辑后,它似乎不是很相关。好吧,也许无论如何有人会发现它很有用。