如何合并和转置2个PHP数组

时间:2018-09-12 16:42:20

标签: php arrays multidimensional-array

我有两个简单的PHP数组,如下所示:

types = ['a', 'b', 'c'];      // 3x1 array
numbers = [1, 2, 3];          // 3x1

我想要的是重组数据(即转置+合并它们)以便能够遍历它们,就像这样:

result = [['a', 1], ['b', 2], ['c', 3]];    // 3x2

是否有一种聪明的方法可以在PHP中使用一些array_XXX本机函数来实现此目的,还是我必须遍历两者才能手动编写它? 谢谢。

3 个答案:

答案 0 :(得分:2)

如果$types中的值是唯一的,则可以执行以下操作:

$combined = array_combine($types, $numbers);

这将产生:

[
    'a' => 1,
    'b' => 2,
    'c' => 3,
]

然后您可以使用以下方法进行迭代:

foreach ($combined as $type => $number)

或者只是:

foreach (array_combine($types, $numbers) as $type => $number)

如果$types中的值不是唯一的,则可以执行以下操作:

$combined = array_map(function($a, $b) { return [$a, $b]; }, $types, $numbers);

答案 1 :(得分:1)

这并不是那么冗长,但是以下内容可以避免您编写循环:

<?php
$types = ['a', 'b', 'c'];
$numbers = [1, 2, 3];
function map_them($k, $v)
{
    return array($k, $v);
}
$results = array_map('map_them', $types, $numbers);
print_r($results);

输出:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => 1
        )

    [1] => Array
        (
            [0] => b
            [1] => 2
        )

    [2] => Array
        (
            [0] => c
            [1] => 3
        )

)

答案 2 :(得分:0)

如果创建两者的一个数组,则循环其中一个子数组,可以使用array_column中的键。

$arr = [$types, $numbers];

foreach($arr[0] as $key => $val){
    $new[] = array_column($arr, $key);
}

var_dump($new);

输出

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    int(1)
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "b"
    [1]=>
    int(2)
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "c"
    [1]=>
    int(3)
  }

https://3v4l.org/QWOJg