【问题标题】:Combine sub arrays in PHP在 PHP 中合并子数组
【发布时间】:2012-06-11 18:58:48
【问题描述】:

我正在尝试按键组合数组。所以所有以相同子键开头的子数组都会合并为一个子数组。另外,我想保留匹配值的最小值。

目前这是我所拥有的:

$statement = Array
(
    [662_0] => Array
        (
            [0] => 06-01-2012
            [1] => 436
            [2] => MEDIA
            [3] => 2006
            [4] => Template Testing
            [5] => KS
            [6] => 662
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
            [11] => 0
            [12] => 1290
            [13] => 1290.00
            [14] => 0.00
            [15] => 0
            [16] => 1290.00
        )

    [662_1] => Array
        (
            [0] => 06-01-2012
            [1] => 436
            [2] => MEDIA
            [3] => 2006
            [4] => Template Testing
            [5] => KS
            [6] => 662
            [7] => 295.00
            [8] => 0
            [9] => 0
            [10] => 0
            [11] => 0
            [12] => 995
            [13] => 1290.00
            [14] => 0.00
            [15] => 0
            [16] => 1290.00
        )

    [662_2] => Array
        (
            [0] => 06-01-2012
            [1] => 436
            [2] => MEDIA
            [3] => 2006
            [4] => Template Testing
            [5] => KS
            [6] => 662
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
            [11] => 0
            [12] => 1290
            [13] => 1290.00
            [14] => 0.00
            [15] => 0
            [16] => 1290.00
        )

    [663_0] => Array
        (
            blah blah blah...
        )
);

这是我想要的:

$statement = Array
(
    [662] => Array
        (
            [0] => 06-01-2012
            [1] => 436
            [2] => MEDIA
            [3] => 2006
            [4] => Template Testing
            [5] => KS
            [6] => 662
            [7] => 295.00
            [8] => 0
            [9] => 0
            [10] => 0
            [11] => 0
            [12] => 995
            [13] => 1290.00
            [14] => 0.00
            [15] => 0
            [16] => 1290.00
        )

    [663] => Array
        (
            blah blah blah...
        )
);

很高兴在需要时提供更多信息!谢谢!!!

【问题讨论】:

  • 为什么标记为mysql?数据是否来自 MySQL 查询?也许最简单的解决方案是从那一端改变它?
  • 到目前为止,您尝试了哪些方法来对数组进行排序和合并并返回结果?
  • eggyal:是的,数据是从 MySQL 查询中填充的。我已经/正在努力改变这方面的方法。stackoverflow.com/questions/10983362/… Jrod:我尝试了 array_merge、array_multisort 以及与 implode 的组合,但无法获得所需的结果。我添加了任何有用的信息,但有很多这就是为什么我一开始没有把它全部倾倒。谢谢!
  • 我假设你的键是用下划线分隔的?你说的最小值是什么意思?什么的最小值?
  • 它们用下划线分隔。键的最小值。在我上面提供的示例中。数组[662_x]键[12]在每个数组中都有不同的值; 1290、995 和 1290。我希望新(合并)数组中的键 [12] 为 995,因为它是值中的最小值。

标签: php arrays multidimensional-array


【解决方案1】:

此代码遍历您的原始数组,将 _ 剪切以获取项目的组合标识符并将它们合并在一起,如果新值小于已设置的值,则替换结果数组中的值.

<?php
$original = array(
        '122_0' => array('k1'=>4, 'k2'=>2),
        '122_1' => array('k2'=>3, 'k3'=>3),
        '122_2' => array('k3'=>2, 'k4'=>4),
        '111_0' => array('k1'=>3, 'k2'=>3),
        '111_1' => array('k2'=>2, 'k3'=>2),
        '111_2' => array('k3'=>1, 'k4'=>1)
);

foreach ($original as $key=>$sub) {
    list($realkey, $num) = explode('_', $key);
    foreach ($sub as $subkey => $value) {
        if ( isset($result[$realkey][$subkey]) 
             && $value < $result[$realkey][$subkey] ) {
            $result[$realkey][$subkey] = $value;
        }
    }
}
print_r($result);

【讨论】:

  • 这太棒了!我好亲近!!!但由于某种原因,我的print_r($result); 是空白的。有什么想法..?
猜你喜欢
  • 1970-01-01
  • 2016-12-12
  • 2022-06-14
  • 2017-10-22
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多