php 拼合第三级数组以创建关联行的索引数组

3zwtqj6y  于 2023-01-16  发布在  PHP
关注(0)|答案(5)|浏览(172)

我有以下问题:
我有一个PHP数组,看起来像这样:

$array = [
    [
        ['sales_count' => '2'],
        ['customer_id' => '1'],
    ],
    [
        ['sales_count' => '3'],
        ['customer_id' => '2'],
    ]
];

现在,如果我在这个数组上使用json_encode,我会得到以下结果:

[[{"sales_count":"2"},{"customer_id":"1"}],[{"sales_count":"3"},{"customer_id":"2"}]]

但是,我尝试获得以下输出:(平面关联数组的数组)

[{"sales_count":"2","customer_id":"1"},{"sales_count":"3","customer_id":"2"}]
f87krz0w

f87krz0w1#

这是因为在原始数组中的索引0和1上有两个数组
你需要做这样的事

$masterArray = Array (
 [0] => Array (
    [0] => Array ( [sales_count] => 2 )
    [1] => Array ( [customer_id] => 1 )
 ) 
[1] => Array (
    [0] => Array ( [sales_count] => 3 )
    [1] => Array ( [customer_id] => 2 ) 
 ) 
);

$json_array = array_merge($masterArray[0], $masterArray[1]);

echo json_encode($json_array);

$masterArray的语法可能错误,但请遵循概念。

hts6caw3

hts6caw32#

阵列上的内容应该是:

$data = array(
  array("sales_count" => 2),
  array("customer_id" => 1),
  array("sales_count" => 2),
  array("customer_id" => 1),
 );
json_encode($data);

让你达到预期的产出。

不过如果数组正确,您可以通过访问json对象

var data = [
   [
    {"sales_count":"2"},
    {"customer_id":"1"}
   ],
    [
     {"sales_count":"3"},
     {"customer_id":"2"}
    ]
 ];

data[0][0].sales_count will access sales_count = 2 on your 1st array.
zpgglvta

zpgglvta3#

我来自越南。我的英语不好。所以,我写了这段代码。我希望这对你有帮助。

$arr = array(
   0 => array(0 => array('sales_count'=>2),1 => array('customer_id' => 1)),
   1 => array(0 => array('sales_count'=>3),1 => array('customer_id' => 2)),
);
$new_arr = array();
foreach($arr as $key => $value){
  foreach($value as $kvalue => $vvalue){
     $new_arr[] = $vvalue;
  }
}
print_r(json_encode($new_arr));
klr1opcd

klr1opcd4#

你可以重新构造它们,然后把它们放到一个新的里面。例如:

$new_array = array();
array_walk_recursive($array, function($val, $key) use (&$new_array) {
    $new_array[] = array($key => $val);
});

$new_array = json_encode($new_array);
echo '<pre>';
print_r($new_array);
// [{"sales_count":2},{"customer_id":1},{"sales_count":3},{"customer_id":2}]

或者只是一个简单的循环,只是简单地,把他们推进去:

$new_array = array();
foreach($array as $values) {
    foreach($values as $val) {
        $new_array[] = $val;
    }
}

echo json_encode($new_array);

如上所示的输出示例。

zf9nrax1

zf9nrax15#

要扁平化每个"行"中的深度关联数据,前面的答案都不起作用。提供的其他技术只是扁平化数据,使其成为单元素关联行的数组(或者更糟糕的是,在扁平化时破坏关联关系)。为了记录在案,动态扁平化数组的第一级更简洁地编码为array_merge(...$array)
相反,你必须迭代所有的行,特别是合并它们的子数组。这将使深层结构扁平化,这样行就有了两个关联元素。这就是问题的真正含义。
代码:(Demo

echo json_encode(
         array_map(
             fn($a) => array_merge(...$a),
             $array
         )
     );

相关问题