如何打破一个PHP多维数组?

时间:2018-08-19 05:01:02

标签: php multidimensional-array implode

说我有这个PHP array()

$ tour_from数组

Array
(
    [0] => Array
        (
            [0] => Dhaka
            [1] => noakhali
        )

    [1] => Array
        (
            [0] => Chittagong
            [1] => Sylhet
        )

)

我想要这样:

  

达卡-诺哈里省
  吉大港-锡尔赫特省

我该怎么做?

我使用了此方法,但这是错误的方法:

foreach ($tour_from as $key => $value) {
    $chunk = array_chunk($value, 2);
    foreach ($chunk as $key1 => $value1) {
       echo $value1[$key][$key1] . ' - ' . $chunk[$key][$key1];
       echo '<br/>';
    }
 }

4 个答案:

答案 0 :(得分:2)

我认为您过于复杂了。为什么不只是在外部数组上循环并向内部数组内爆?

<?php

$tour_from = [
    ['Dhaka', 'Noakhali'],
    ['Chittagong', 'Sylhet'],
];

foreach ($tour_from as $elem) {
    print implode(' - ', $elem);
    print '<br>';
}

答案 1 :(得分:2)

不需要分块或第二个循环。

一个包含implode()的循环即可。

代码:(Demo

$tour_from = [
    ['Dhaka', 'Noakhali'],
    ['Chittagong', 'Sylhet']
];

foreach ($tour_from as $row) {
    echo implode(' - ', $row), "\n";
}

输出:

Dhaka - Noakhali
Chittagong - Sylhet

或者,如果您喜欢功能性的一线客机:(Demo

echo implode("<br>", array_map(function($row){ return implode(' - ', $row); }, $tour_from));

*这样做的好处是最终内含字符串上没有结尾<br>


或者使用更少的函数调用,这是带有array_reduce()的版本:(Demo

echo array_reduce($tour_from, function($carry, $row) {
    return $carry .= ($carry !== null ? "<br>\n" : '') . $row[0] . ' - ' . $row[1];
});

答案 2 :(得分:0)

如果要避免使用foreach,可以对array_walk做同样的事情,并通过引用&$var进行传递。

$array = [
    ["Dhaka", "noakhali"],
    ["Chittagong", "Sylhet"]
];

array_walk($array, function(&$item){
    $item = implode(' - ', $item);
});

print_r($array);

输出:

 Array
(
    [0] => Dhaka - noakhali
    [1] => Chittagong - Sylhet
)

Sandbox

如果您要输出而不是修改数组,则可以直接回显它,或执行类似implode('<br>', $array)后缀的操作。

答案 3 :(得分:-1)

哦,是的,我找到了方法:

foreach ($tour_from as $key => $value) {
    $chunk = array_chunk($value, 2);
    foreach ($chunk as $key1 => $value1) {
       echo implode(' - ', $value1);
       echo '<br/>';                                                  
    }
 }