将多维数组转换为单个数组

Cur*_*ind 35 php arrays

我有一个无数的多维数组

/* This is how my array is currently */
Array
(
[0] => Array
    (
        [0] => Array
            (
                [plan] => basic
            )

        [1] => Array
            (
                [plan] => small
            )

        [2] => Array
            (
                [plan] => novice
            )

        [3] => Array
            (
                [plan] => professional
            )

        [4] => Array
            (
                [plan] => master
            )

        [5] => Array
            (
                [plan] => promo
            )

        [6] => Array
            (
                [plan] => newplan
            )

    )

 )
Run Code Online (Sandbox Code Playgroud)

我想将此数组转换为此表单

/*Now, I want to simply it down to this*/
Array (
[0] => basic
[1] => small
[2] => novice
[3] => professional
[4] => master
[5] => promo
[6] => newplan
)
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?

Ali*_*guy 84

假设这个数组可能会或可能不会被冗余嵌套,并且你不确定它的深度,这应该为你扁平化:

function array_flatten($array) { 
  if (!is_array($array)) { 
    return FALSE; 
  } 
  $result = array(); 
  foreach ($array as $key => $value) { 
    if (is_array($value)) { 
      $result = array_merge($result, array_flatten($value)); 
    } 
    else { 
      $result[$key] = $value; 
    } 
  } 
  return $result; 
} 
Run Code Online (Sandbox Code Playgroud)

  • 不能将子级作为空数组使用。 (2认同)

Usm*_*med 75

$array = array_column($array, 'plan');
Run Code Online (Sandbox Code Playgroud)

第一个参数是数组| 第二个参数是数组键.

注意:array_column是在PHP 5.5中引入的,因此它在早期版本中不起作用.

  • 很好,但需要PHP 5> = 5.5.0:https://php.net/manual/en/function.array-column.php (3认同)

Pau*_*aul 13

只需将它分配给它自己的第一个元素:

$array = $array[0];
Run Code Online (Sandbox Code Playgroud)


小智 8

问题数组:

\n
array:2 [\xe2\x96\xbc\n  0 => array:3 [\xe2\x96\xbc\n    0 => array:4 [\xe2\x96\xbc\n      "id" => 8\n      "name" => "Veggie Burger"\n      "image" => ""\n      "Category_type" => "product"\n    ]\n    1 => array:4 [\xe2\x96\xbc\n      "id" => 9\n      "name" => "Veggie Pitta"\n      "image" => ""\n      "Category_type" => "product"\n    ]\n    2 => array:4 [\xe2\x96\xbc\n      "id" => 10\n      "name" => "Veggie Wrap"\n      "image" => ""\n      "Category_type" => "product"\n    ]\n  ]\n  1 => array:2 [\xe2\x96\xbc\n    0 => array:4 [\xe2\x96\xbc\n      "id" => 18\n      "name" => "Cans 330ml"\n      "image" => ""\n      "Category_type" => "product"\n    ]\n    1 => array:4 [\xe2\x96\xbc\n      "id" => 19\n      "name" => "Bottles 1.5 Ltr"\n      "image" => ""\n      "Category_type" => "product"\n    ]\n  ]\n]\n
Run Code Online (Sandbox Code Playgroud)\n

解决方案数组:

\n
array:5 [\xe2\x96\xbc\n  0 => array:4 [\xe2\x96\xbc\n    "id" => 8\n    "name" => "Veggie Burger"\n    "image" => ""\n    "Category_type" => "product"\n  ]\n  1 => array:4 [\xe2\x96\xbc\n    "id" => 9\n    "name" => "Veggie Pitta"\n    "image" => ""\n    "Category_type" => "product"\n  ]\n  2 => array:4 [\xe2\x96\xbc\n    "id" => 10\n    "name" => "Veggie Wrap"\n    "image" => ""\n    "Category_type" => "product"\n  ]\n  3 => array:4 [\xe2\x96\xbc\n    "id" => 18\n    "name" => "Cans 330ml"\n    "image" => ""\n    "Category_type" => "product"\n  ]\n  4 => array:4 [\xe2\x96\xbc\n    "id" => 19\n    "name" => "Bottles 1.5 Ltr"\n    "image" => ""\n    "Category_type" => "product"\n  ]\n]\n
Run Code Online (Sandbox Code Playgroud)\n

编写此代码并得到您的解决方案,$subcate即您的多维数组。

\n
$singleArrayForCategory = array_reduce($subcate, 'array_merge', array());\n
Run Code Online (Sandbox Code Playgroud)\n


小智 7

 $singleArray = array();

    foreach ($multiDimensionalArray as $key => $value){
        $singleArray[$key] = $value['plan'];
    }
Run Code Online (Sandbox Code Playgroud)

这是从multiDimensionalArray数组创建数组的最佳方法.

谢谢


小智 7

如果遇到纯数据的多维数组,如下面的示例所示,则可以使用对array_merge()的单个调用通过反射来完成工作:

$arrayMult = [ ['a','b'] , ['c', 'd'] ];
$arraySingle = call_user_func_array('array_merge', $arrayMult);
// $arraySingle is now = ['a','b', 'c', 'd'];
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用“$arraySingle = array_merge(...$arrayMult);”来做到这一点 (3认同)

dec*_*eze 5

对于这种特殊情况,可以这样做:

$array = array_map('current', $array[0]);
Run Code Online (Sandbox Code Playgroud)

基本上,这是完全相同的问题,请看那里的一些答案:PHP数组来自未知数量的参数


dev*_*l Ψ 5

没有任何答案对我有帮助,以防我有多个级别的嵌套数组。该解决方案与@AlienWebguy 已经完成的几乎相同,但差异很小。

function nestedToSingle(array $array)
{
    $singleDimArray = [];

    foreach ($array as $item) {

        if (is_array($item)) {
            $singleDimArray = array_merge($singleDimArray, nestedToSingle($item));

        } else {
            $singleDimArray[] = $item;
        }
    }

    return $singleDimArray;
}
Run Code Online (Sandbox Code Playgroud)

测试示例

$array = [
        'first',
        'second',
        [
            'third',
            'fourth',
        ],
        'fifth',
        [
            'sixth',
            [
                'seventh',
                'eighth',
                [
                    'ninth',
                    [
                        [
                            'tenth'
                        ]
                    ]
                ],
                'eleventh'
            ]
        ],
        'twelfth'
    ];

    $array = nestedToSingle($array);
    print_r($array);

    //output
    array:12 [
        0 => "first"
        1 => "second"
        2 => "third"
        3 => "fourth"
        4 => "fifth"
        5 => "sixth"
        6 => "seventh"
        7 => "eighth"
        8 => "ninth"
        9 => "tenth"
        10 => "eleventh"
        11 => "twelfth"
   ]
Run Code Online (Sandbox Code Playgroud)