将数组添加到值

Add array to Value

经过$single_array = array_reduce ($new_array, 'array_merge_recursive', array ());

我得到这个结果

array (size=9)
  'key1' => string 'value1' 
  'key2' => string 'value2' 
  'key3' => string 'value3' 
  'key7' => 
    array 
      0 => string 'value7'
      1 => string 'value13' 
  'key8' => 
    array 
      0 => string 'value8' 
      1 => string 'value14'
  'key9' => 
    array 
      0 => string 'value9' 
      1 => string 'value15' 
  'key19' => string 'value19' 
  'key20' => string 'value20' 
  'key21' => string 'value21' 

但我想要那个

array 
  'key1' =>
    array 
      0 => string 'value1' 
  'key2' =>
    array 
      0 => string 'value2' 
  'key3' =>
    array 
      0 => string 'value3' 
  'key7' => 
    array 
      0 => string 'value7' 
      1 => string 'value13' 
  'key8' => 
    array 
      0 => string 'value8' 
      1 => string 'value14' 
  'key9' => 
    array 
      0 => string 'value9' 
      1 => string 'value15' 
  'key19' =>
    array 
      0 => string 'value19' 
  'key20' =>
    array 
      0 => string 'value20'
  'key21' =>
    array 
      0 => string 'value21'

可能很简单,但是我已经堵了几个小时了

简而言之,我希望我的 array_merge_recursive 不只向相同的值添加一个键,而是向不相同的值添加一个数组 [0]。

编辑

开头的代码,目标是简化它,并且知道生成的值以及结构的顺序可以是随机的。

<?php
$array = array(
    'sensors' => array(
        '0' => array(
            'data' => array(
                '0' => array(
                    'key1' => 'value1',
                    'key2' => 'value2',
                    'key3' => 'value3',
                )
            )
        ),
        '1' => array(
            'data' => array(
                '0' => array(
                    'key7' => 'value7',
                    'key8' => 'value8',
                    'key9' => 'value9',
                )
            )
        ),

        '2' => array(
            'data' => array(
                '0' => array(
                    'key7' => 'value13',
                    'key8' => 'value14',
                    'key9' => 'value15',
                )
            )
        ),
        '3' => array(
            'data' => array(
                '0' => array(
                    'key19' => 'value19',
                    'key20' => 'value20',
                    'key21' => 'value21',
                )
            )
        )
    )
);
$new_array = array();
foreach ($array as $element1) {
    foreach ($element1 as $j => $element2) {
        foreach ($element2 as $element3) {
            foreach ($element3 as $element4) {
                $new_array[$j] = $element4;
                $single_array = array_reduce($new_array, 'array_merge_recursive', array());
               
            }
        }
    }
}
var_dump($single_array);

您可以在原始数组上使用 array_walk_recursive

$result = [];
array_walk_recursive($array, function ($value, $key) use (&$result) {
    $result[$key][] = $value;
});

在您提供的示例数组 运行 之后,$result 将是:

[
  'key1' => ['value1'],
  'key2' => ['value2'],
  'key3' => ['value3'],
  'key7' => ['value7', 'value13'],
  'key8' => ['value8', 'value14'],
  'key9' => ['value9', 'value15'],
  'key19' => ['value19'],
  'key20' => ['value20'],
  'key21' => ['value21']
];

谢谢,我发现,我只是混淆了 in_array 和 is_array。我的坏

$array2 = array();
foreach ($single_array as $key1 => $value1) {
     if (is_array($value1)) {
         foreach($value1 as $key2 => $value2) {
             $array2[$key1][$key2] = $value2;
         }
     }
     else {
         $array2[$key1][] = $value1;
     }
}

var_dump($array2);