如何将两个数组合并为一个数组并转置结构以简化循环打印?

时间:2020-09-11 12:05:00

标签: php arrays multidimensional-array merge transpose

如何合并2个数组...:

$array_1 = [['title' => 'Google'], ['title' => 'Bing']];

$array_2 = [['link' => 'www.example1.com'], ['link' => 'www.example2.com']];

为了获得...:

$array_3 = [
    ['title' => 'Google', 'link' => 'www.example1.com'],
    ['title' => 'Bing', 'link' => 'www.example2.com']
];

我想$array_3的结构应如下:

最终结果:

Google - See website

Bing - See website

获得最终结果的功能:

function site_and_link($array_3) {
    foreach ($array_3 as $a) {
        echo $a['title'] . " - <a href=" . $a['link'] . ">See website</a></br>";
    }
}

安排$array_3缺少的步骤是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用简单的foreach循环和array_merge合并两个子数组。

<?php

$result = [];
foreach($array_1 as $index => $val){
  $result[] = array_merge($val,$array_2[$index]);
}

print_r($result);

答案 1 :(得分:0)

使用循环合并并转置数组数据,然后使用另一个循环打印到屏幕是间接编程。

理想情况下,如果可能,您应该尝试在代码中更早地合并这些结构(我不知道这些数据集来自何处,所以我不建议。)

否则,请不要合并两个数组,而只需编写一个循环即可打印到屏幕上。因为期望这两个数组通过它们的索引相互关联,所以没有产生Notices的风险。

自从我键入此内容后,我将借此机会揭示一些有用的技巧:

  1. 您可以通过使用带有指向foreach()中目标变量的静态键的数组语法来解包单元素子数组。
  2. 使用printf()有助于减少由于级联/插值而引起的行肿胀/混淆。通过将占位符(%s)写入字符串,然后在尾随参数中传递这些占位符的值,通常可以提高可读性。

代码:(Demo

$sites = [['title' => 'Google'], ['title' => 'Bing']];
$links = [['link' => 'www.example1.com'], ['link' => 'www.example2.com']];

foreach ($sites as $index => ['title' => $title]) {
    printf(
        '%s - <a href="%s">See website</a></br>',
        $title,
        $links[$index]['link']
    );
}

输出:

Google - <a href="www.example1.com">See website</a></br>
Bing - <a href="www.example2.com">See website</a></br>