【问题标题】:How to restructure an array of single-element associative arrays into grouped subarrays?如何将单元素关联数组的数组重组为分组子数组?
【发布时间】:2020-05-30 05:56:29
【问题描述】:

我有一个关联数组:

Array ( 
[0] => Array ( [term_title] => black ) 
[1] => Array ( [color_quantity] => 2 ) 
[2] => Array ( [color_price] => 22 ) 
[3] => Array ( [term_title] => blue ) 
[4] => Array ( [color_quantity] => 3 ) 
[5] => Array ( [color_price] => 33 ))

如何改成:

Array ( 
[0] => Array ( [term_title] => black, [color_quantity] => 2, [color_price] => 22 ) 
[1] => Array ( [term_title] => blue, [color_quantity] => 3, [color_price] => 33 ) )

我尝试以下代码:

$post = array();
for($i = 0; $i < 2; $i++){
    foreach($feild_data as $data){
        $post[$i][$data['name']] = $data['value'];
    }
}

但它会重复最后一个索引两次。即

Array ( 
[0] => Array ( [term_title] => blue, [color_quantity] => 3, [color_price] => 33 ) 
[1] => Array ( [term_title] => blue, [color_quantity] => 3, [color_price] => 33 ) )

【问题讨论】:

  • 这个变化背后的算法是什么?
  • 您的代码引用了输出中没有的一些内容 - $post['item_' . $i]$data['name']$data['value'],因此不确定您是如何实现输出的。
  • 我编辑 $post['item_' 。 $i] 到 $post[$i],它的一般。 $data 又是一个数组,其中包含键和值作为名称和值。此数组来自表单中的 jQuery serializedArray
  • @mickmackusa,不确定骗子是否真的适合,在这种情况下,他们没有使用关联数组,因此会丢失所有键(我认为)。

标签: php arrays multidimensional-array grouping


【解决方案1】:

如果您喜欢语言结构和基本算术,那么您可以简单地遍历数组,除以 3 并使用该浮点值作为第一级键 - php 将自动 floor() 该值形成一个整数

代码:(Demo)

foreach ($array as $index => $subarray) {
    $key = key($subarray);
    $result[$index / 3][$key] = $subarray[$key];
}
var_export($result);

或者,如果您更喜欢函数式语法(我经常这样做),您可以形成子数组组,然后合并/展平这些组。下面的技术不需要声明$result 变量,可以写成单行。

代码:(Demo)

var_export(
    array_map(
        function($v) {
            return array_merge(...$v);
        },
        array_chunk($array, 3)
    )
);

两种技术都提供以下输出:

array (
  0 => 
  array (
    'term_title' => 'black',
    'color_quantity' => 2,
    'color_price' => 22,
  ),
  1 => 
  array (
    'term_title' => 'blue',
    'color_quantity' => 3,
    'color_price' => 33,
  ),
)

【讨论】:

    【解决方案2】:

    不确定namevalue 是从哪里来的$data['name']$data['value'],但是您可以使用array_chunk 将它们分成块并将它们分配给$posts

    <?php
    
    $posts = array();
    foreach(array_chunk($field_data,3) as $data){
        $temp = [];
        foreach($data as $field){
            foreach($field as $key => $value){
                $temp[$key] = $value;
            }
        }
    
        $posts[] = $temp;
    }
    
    
    print_r($posts);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多