将数组中的键添加到foreach循环中的现有数组值

时间:2019-06-04 13:33:38

标签: php arrays

我有一个数组键值对。我需要从此键和值对创建新数组。例如

我尝试过foreach循环

    foreach($array as $key => $val){
// here i m getting key and value i want to combine key and value in single array
    }

Array
(
'146' => Array
    (
        'sam' => Array (
                'dex',
                'max'
        )
    )
'143' => Array
    (
         'tim' => Array (
                'thai',
                'josh'
        )           
    )
 )

预期的输出是作为第一个元素的按键

$out = [
    [ 'sam', 'dex', 'max'],
    [  'tim','thai', 'josh']
];

3 个答案:

答案 0 :(得分:2)

您可以将array-merge用作:

foreach($array as $key => $val)
    $out[] = array_merge([$key], $val);

请注意,在您的示例中,您还具有另一个级别的键(“ 146”,“ 143”)->在使用此代码之前,需要将其删除。

已编辑

foreach($arr as $val) {
    $key = key($val);
    $out[] = array_merge([$key], $val[$key]);
}

实时示例:3v4l

答案 1 :(得分:0)

那呢?

$output = [];
foreach($array as $key => $val) {
    $data = $val;
    array_unshift($data, $key);
    $output[] = $data;
}

答案 2 :(得分:0)

  • 因此,我们需要为数组中的每个键展平数组。
  • 我们创建了一个函数,该函数递归调用进一步的深层数组,并将所有这些结果收集在一个新数组中,该数组作为第二个参数传递。

代码:

<?php

$arr = Array(
'146' => Array
    (
        'sam' => Array (
                'dex',
                'max'
        )
    ),
'143' => Array
    (
         'tim' => Array (
                'thai',
                'josh'
        )           
    )
 );


$result = [];

foreach($arr as $key => $value){
    $flat_data = [];
    flattenArray($value,$flat_data);
    $result[] = $flat_data;
}


function flattenArray($data,&$flat_data){
    foreach ($data as $key => $value) {
        if(is_array($value)){
            $flat_data[] = $key;
            flattenArray($value,$flat_data);
        }else{
            $flat_data[] = $value;
        }   
    }
}

print_r($result);

演示: https://3v4l.org/bX9R3

  • 因为我们传递了一个新的数组来收集结果作为第二个参数,所以它的效果要好于在每次函数调用时返回结果数组,然后执行数组合并(这会使效率低下) )。

  • 这将与关卡深度无关。