从多维数组动态创建数组

时间:2012-02-10 00:32:18

标签: php arrays multidimensional-array

因此,如果有一个多维数组,如:

从这里得到它(作为演示):PHP. Loop through an array and get items with attributes in common

$data

Array
(
    [0] => stdClass Object
        (
            [term_id] => 3
            [name] => Comercial
        )

    [1] => stdClass Object
        (
            [term_id] => 4
            [name] => Escolar
        )

    [2] => stdClass Object
        (
            [term_id] => 5
            [name] => Kinder
        )

    [3] => stdClass Object
        (
            [term_id] => 6
            [name] => Primaria
        )

    [4] => stdClass Object
        (
            [term_id] => 7
            [name] => Secundaria
        )

    [5] => stdClass Object
        (
            [term_id] => 1
            [name] => Uncategorized
        )

)

拥有0,1,2,3,4,5 stdClass Object s,如何动态为每个std Object创建单独的数组。

我的意思是该函数应该能够创建$varX数组,其中X是stdObject的数组编号,自动...

$var0 = $data[0]; $var1 = $data[1]; 等等,由$data第一级数组计数确定。


修改 我被带走了,忘了提到最重要的问题:

拥有$var0$var1 ...非常重要,因为以后可以单独使用全部或每个。

所以

  • 需要根据多维数组的第一级计数创建X变量
  • 每个$varX都需要与$varX的其余部分共同访问或单独访问。

    $count = count($data); //6

    foreach ($data as $key => $value) { $var.$key = $value; }

好的,该功能部分起作用,因为从那里我不知道如何让它自动添加$val1$val2 ...到(ex :) array_intersect($val1,$val2,$val3...

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用extract

extract($data, EXTR_PREFIX_ALL, 'var');

话虽如此,它会在前缀后添加下划线(_)(例如var_0)。

<强>更新

关于您的修改,您只需使用call_user_func_array致电array_intersect即可。不需要变量。

call_user_func_array('array_intersect', $data);

答案 1 :(得分:0)

您可以将每个对象转换为数组。

foreach ($data AS $key => $datum)
{
    $data[$key] = (array) $datum;
}

供您更新:

foreach ($data AS $key => $datum)
{
    $newkey = 'var' . $key; // we want the variable to be called "var" plus the number
    $$newkey = (array) $datum; // Make it an array
    $data[$key] = $$newkey; // And update the $data array to contain the array
}

您现在拥有$var0$var1等,并且还可以将其作为$data中的集合进行访问,并且它们都是一个数组。

答案 2 :(得分:0)

foreach ($data as $key => $obj)
{
  $key = 'var'.$key;
  $$key = $obj;
}