【问题标题】:Merge 2 arrays having same number of items - php合并具有相同数量项目的 2 个数组 - php
【发布时间】:2022-01-05 04:51:10
【问题描述】:

$newResponse$key 两个数组中的项目数将始终相同。对于$newResponse 的每个项目,我想以它们存在的相同顺序将$key 的项目添加到$newResponse预期结果中提到的$key 数组中。我怎样才能做到这一点?

dump($newResponse); 是一个类似下面的数组,它是foreach 循环的结果。

array:4 [
  0 => array:6 [
    "courseId" => 18
    "courseDisplayName" => "qqq"
  ]
  1 => array:6 [
    "courseId" => 1
    "courseDisplayName" => "ips"
  ]
  2 => array:6 [
    "courseId" => 18
    "courseDisplayName" => "qqq"
  ]
  3 => array:6 [
    "courseId" => 1
    "courseDisplayName" => "ips"
  ]
]

dump($key); 是一个如下所示的数组,它是另一个foreach 循环的结果。

array:4[
    0=>[
      "totalPoints" => 2
      "percent" => 1.0
      "id" => 2
    ]
    1=> [
      "totalPoints" => 10
      "percent" => 2
      "id" => 3
    ]
    2=> [
      "totalPoints" => 4
      "percent" => 0.0
      "id" => 6
    ]
    3=> [
      "totalPoints" => 4
      "percent" => 0.0
      "id" => 5
    ]
   ]

预期结果

[
      [
        "courseId" => 18
        "courseDisplayName" => "qqq"
        "totalPoints" => 2
        "percent" => 1.0
        "id" => 2
      ]
      [
        "courseId" => 1
        "courseDisplayName" => "ips"
        "totalPoints" => 10
        "percent" => 2
        "id" => 3
      ]
      [
        "courseId" => 18
        "courseDisplayName" => "qqq"
        "totalPoints" => 4
        "percent" => 0.0
        "id" => 6
      ]
      [
        "courseId" => 1
        "courseDisplayName" => "ips"
        "totalPoints" => 4
        "percent" => 0.0
        "id" => 5
      ]
    ]

【问题讨论】:

  • 你试过foreach吗?
  • This 似乎相关。
  • @nice_devi 知道我可以用 foreach 解决它。但我不知道该怎么做?能给我看看代码吗?
  • @user1597430,我知道编程基础知识,我正在寻求帮助以了解在 foreach 循环中解决的逻辑
  • @nice_devi 尝试了链接中提到的merge() 收集方法。我把它放在我在原始问题中提到的第二个 foreach 循环中。然后,它将第二个数组仅与第一个数组的第一个合并,而不是按顺序与第一个数组的所有项合并。

标签: php arrays laravel eloquent foreach


【解决方案1】:

这是一种方法:

假设您的数据是:

        $newResponse = [
            [
                "courseId" => 18,
                "courseDisplayName" => "qqq"
            ],
            [
                "courseId" => 1,
                "courseDisplayName" => "ips",
            ],
            [
                "courseId" => 18,
                "courseDisplayName" => "qqq",
            ],
            [
                "courseId" => 1,
                "courseDisplayName" => "ips",
            ]
        ];

        $key = [
            [
        "totalPoints" => 2,
        "percent" => 1.0,
        "id" => 2
      ],
      [
        "totalPoints" => 10,
        "percent" => 2,
        "id" => 3
      ],
      [
        "totalPoints" => 4,
        "percent" => 0.0,
        "id" => 6
      ],
      [
        "totalPoints" => 4,
        "percent" => 0.0,
        "id" => 5
      ]
    ];

那么我可能会使用 array_map,最近将它用于这种目的:

        $out = [];
        array_map(function($a,$b) use (&$out) {
            $out[] = $a + $b;
        },$newResponse,$key);
        print_r($out);

请注意,上面的 + 与数组合并非常相似,我相信在您的用例中可以互换。您可以在此处了解不同之处:Array_merge versus +

【讨论】:

  • 我应该把这段代码保存在哪里?在两个 foreach 循环之后?
  • @user17699125 是的,当你的两个数组完全填充时,在两个 foreach 循环之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多