我有两个简单的PHP数组,如下所示:
types = ['a', 'b', 'c']; // 3x1 array
numbers = [1, 2, 3]; // 3x1
我想要的是重组数据(即转置+合并它们)以便能够遍历它们,就像这样:
result = [['a', 1], ['b', 2], ['c', 3]]; // 3x2
是否有一种聪明的方法可以在PHP中使用一些array_XXX本机函数来实现此目的,还是我必须遍历两者才能手动编写它? 谢谢。
答案 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)
}