【问题标题】:best way to mix arrays with one same value php将数组与一个相同的值 php 混合的最佳方法
【发布时间】:2021-04-06 20:34:35
【问题描述】:

我有三个这样的数组:

{ 0 => ["name"=>'name1' , "value1" =>'value1'] , ...}

如果它们具有相同的名称,我想混合这些数组!

这就是我想要的:

{ 0 => ["name"=>'name1' , "value1" =>'value1' , "value2" =>'value2' , "value3" =>'value2'] , ...}

我编码的内容:(x, y, z 是我的数组)

    $m = 0;
        for ($i = 0; $i < count($x); $i++) {
            for ($j = 0; $j < count($y); $j++) {
                if($x[$i]['symbol_name'] == $y[$j]['symbol_name']){
                $chartData[$m] = array_merge($x[$i],$y[$j]);
                $m++;    
                }
            }
        }
    
    $m = 0;
    for ($i = 0; $i < count($chartData); $i++) {
        for ($j = 0; $j < count($z); $j++) {
            if ($chartData[$i]['symbol_name'] == $z[$j]['symbol_name']) {
                $newChart[$m] = array_merge($chartData[$i], $z[$j]);
                $m++;
            }
        }
    }

但正如您所见,这可能需要很长时间(每个数组有 600 多个项目),所以任何人都可以帮我找到混合这些数组的最快方法。

【问题讨论】:

  • 如果它们具有相同的名称,则混合这些数组不清楚并且您的示例数组不清楚。
  • 请分享更多细节,比如全套输入和输出数据。从给定的输入中,我看不到任何到达 value3 的方法
  • 我有 3 个具有相同值的子数组的数组,如果它们具有相同的名称,我想将这 3 个子数组混合成一个数组。

标签: php arrays merge


【解决方案1】:

如果我正确理解任务:

$x = [
    ["name"=>'name1' , "value1" =>'value1'],
    ["name"=>'name2' , "value2" =>'value2'],
    ["name"=>'name3' , "value3" =>'value3'],
];

$y = [
    ["name"=>'name1' , "value11" =>'value11'],
    ["name"=>'name4' , "value4" =>'value4'],
];

$z = [
    ["name"=>'name2' , "value22" =>'value22'],
    ["name"=>'name3' , "value33" =>'value33'],
    ["name"=>'name5' , "value5" =>'value5'],
];


function mix_array(...$arrays) {
    $result = [];    
    foreach ($arrays as $array) {
        foreach ($array as $a) {
            if (!isset($result[$a['name']])) {
                $result[$a['name']] = [];
            }
            $result[$a['name']] = array_merge($result[$a['name']], $a);
        }
    }
    return array_values($result);
}   

print_r(mix_array($x, $y, $z));

输出:

Array
(
    [0] => Array
        (
            [name] => name1
            [value1] => value1
            [value11] => value11
        )

    [1] => Array
        (
            [name] => name2
            [value2] => value2
            [value22] => value22
        )

    [2] => Array
        (
            [name] => name3
            [value3] => value3
            [value33] => value33
        )

    [3] => Array
        (
            [name] => name4
            [value4] => value4
        )

    [4] => Array
        (
            [name] => name5
            [value5] => value5
        )

)

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 2019-05-23
  • 2016-10-07
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多