从标准数组创建多维数组

时间:2013-11-18 13:51:08

标签: php arrays multidimensional-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)];我期望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]的值。

1 个答案:

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

编辑:问题编辑后,它似乎不太相关。好吧,也许有人会觉得它很有用。