如何在php中组合三个数组
例如,我有三个数组如何在php中组合三个数组,php,arrays,Php,Arrays,例如,我有三个数组 Array1 array (size=3) 0 => string 'a' (length=1) 1 => string 'b' (length=1) 2 => string 'c' (length=1) Array2 array (size 3) 0 => string '$' (length=1) 1 => string '%' (length=1) 2 => string '^' (length=1) Array3 array (
Array1
array (size=3)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
Array2
array (size 3)
0 => string '$' (length=1)
1 => string '%' (length=1)
2 => string '^' (length=1)
Array3
array (size 3)
0 => int '1' (length=1)
1 => int '2' (length=1)
2 => int '3' (length=1)
我希望阵列4具有这样的配置,即每个阵列的每一行都应该是一个组。比如说
Array4
0th
name=a
type=$
price=1
1st
name=b
type=%
price=2
2nd
name=c
type=^
price=3
我试了一下,结果非常好
$output = array_combine($array1, $array2);
但当我试着这样做时,它并没有给出预期的结果
$output = array_combine(array_combine($array, $array2),$array3);
如果您知道所有三个数组的长度都相同,并且都具有所有必需的数据,那么一个简单的修复方法是迭代该长度并构建结果数组:
$result = [];
$count = count($array1);
for($i=0; $i < $count; $i++){
$result[$i] = [
'name'=>$array1[$i],
'type'=>$array2[$i],
'price'=>$array3[$i]
];
}
$result保存您所需的内容。您正在尝试的-array_combined-并不是为了用其他数组中的值构建一个数组,因此它无法用于此目的。该函数用于构建一个数组,该数组的键来自一个数组,值来自另一个数组。如果您知道所有三个数组的长度相同,并且具有所有必需的数据,那么一个简单的修复方法是迭代该长度并构建结果数组:
$result = [];
$count = count($array1);
for($i=0; $i < $count; $i++){
$result[$i] = [
'name'=>$array1[$i],
'type'=>$array2[$i],
'price'=>$array3[$i]
];
}
$result保存您所需的内容。您正在尝试的-array_combined-并不是为了用其他数组中的值构建一个数组,因此它无法用于此目的。该函数用于构建一个数组,其键来自一个数组,值来自另一个数组。使用函数助手
通过使用array_map和array_combine,您可以不必处理计数、迭代器、手动数组分配和手动数组组合之类的事情
该解决方案通过使用将所有复杂性隐藏在有用的功能API后面的过程来降低复杂性
$names = ['a', 'b', 'c'];
$types = ['$', '%', '^'];
$prices = [1, 2, 3];
$result = array_map(function ($name, $type, $price) {
return array_combine(
['name', 'type', 'price'],
[$name, $type, $price]
);
}, $names, $types, $prices);
echo json_encode($result, JSON_PRETTY_PRINT);
为简洁起见,输出一些已删除的换行符
[
{"name": "a", "type": "$", "price": 1},
{"name": "b", "type": "%", "price": 2},
{"name": "c", "type": "^", "price": 3}
]
隐藏自己的复杂性
您甚至可以通过定义自己的过程array_zip_combine来抽象出自己的复杂性,array_zip_combine的工作原理与array_combine类似,但它接受多个输入数组,这些数组在合并之前先压缩
这个解决方案需要PHP7+
PHP5.4的相同解决方案+
利用功能助手
通过使用array_map和array_combine,您可以不必处理计数、迭代器、手动数组分配和手动数组组合之类的事情
该解决方案通过使用将所有复杂性隐藏在有用的功能API后面的过程来降低复杂性
$names = ['a', 'b', 'c'];
$types = ['$', '%', '^'];
$prices = [1, 2, 3];
$result = array_map(function ($name, $type, $price) {
return array_combine(
['name', 'type', 'price'],
[$name, $type, $price]
);
}, $names, $types, $prices);
echo json_encode($result, JSON_PRETTY_PRINT);
为简洁起见,输出一些已删除的换行符
[
{"name": "a", "type": "$", "price": 1},
{"name": "b", "type": "%", "price": 2},
{"name": "c", "type": "^", "price": 3}
]
隐藏自己的复杂性
您甚至可以通过定义自己的过程array_zip_combine来抽象出自己的复杂性,array_zip_combine的工作原理与array_combine类似,但它接受多个输入数组,这些数组在合并之前先压缩
这个解决方案需要PHP7+
PHP5.4的相同解决方案+
使用数组映射和数组组合函数的简单解决方案:
$result = array_map(function($item) {
return array_combine(['name', 'type', 'price'], $item);
}, array_map(null, $array1, $array2, $array3));
print_r($result);
输出:
Array
(
[0] => Array
(
[name] => a
[type] => $
[price] => 1
)
[1] => Array
(
[name] => b
[type] => %
[price] => 2
)
[2] => Array
(
[name] => c
[type] => ^
[price] => 3
)
)
使用数组映射和数组组合函数的简单解决方案:
$result = array_map(function($item) {
return array_combine(['name', 'type', 'price'], $item);
}, array_map(null, $array1, $array2, $array3));
print_r($result);
输出:
Array
(
[0] => Array
(
[name] => a
[type] => $
[price] => 1
)
[1] => Array
(
[name] => b
[type] => %
[price] => 2
)
[2] => Array
(
[name] => c
[type] => ^
[price] => 3
)
)
一个foreach循环可以工作一个foreach循环可以工作foreach更efficent@Dagon你是指一般情况还是在这种情况下?你能解释一下原因吗?不知道你对每个循环都进行计数而不是jsut,但一旦达到$array1,即$ar1,这就是你所说的Dagon?@Alex什么?为什么不呢?foreach更重要efficent@Dagon你是指一般情况还是在这种情况下?你能解释一下原因吗?不知道你对每个循环都进行计数而不是jsut,但一旦达到$array1,即$ar1,这就是你所说的Dagon?@Alex什么?为什么不呢?我想了解你的PHP7+解决方案。我想我错过了什么。函数声明从不提及值。可以吗?我希望函数数组_zip _combine$keys,…$value是declaration@BeetleJuice谢谢你的注意。我使用的是array\u slicefunc\u get\u args,因此代码仍然有效,但是rest参数更适合。我首先编写了PHP5,然后在转换为PHP7^ ^时忘记了rest参数,最后也从内部函数中删除了func_get_参数。PHP7摆脱了那些陈旧的apisthank,获得了创造性的解决方案,感觉有点好。直到我读了你的答案,我才意识到数组映射可以用于多个数组+1.我试图理解你的PHP7+解决方案。我想我错过了什么。函数声明从不提及值。可以吗?我希望函数数组_zip _combine$keys,…$value是declaration@BeetleJuice谢谢你的注意。我使用的是array\u slicefunc\u get\u args,因此代码仍然有效,但是rest参数更适合。我首先编写了PHP5,然后在转换为PHP7^ ^时忘记了rest参数,最后也从内部函数中删除了func_get_参数。PHP7摆脱了那些陈旧的apisthank,获得了创造性的解决方案,感觉有点好。直到我读了你的答案,我才意识到数组映射可以用于多个数组+罗曼:这是个很酷的解决方案。教了我一些新东西。谢谢。有点奇怪的是,这个答案刚好在我的答案之后出现,因为它实际上是一样的。无论如何,嵌套数组映射会根据需要将迭代量增加一倍。我建议像我做的那样实现数组\u zip\u组合
如果你想让答案更具可读性,但仍然将迭代次数保持在最低限度,这是一个非常酷的解决方案。教了我一些新东西。谢谢。有点奇怪的是,这个答案刚好在我的答案之后出现,因为它实际上是一样的。无论如何,嵌套数组映射会根据需要将迭代量增加一倍。如果您试图使答案更具可读性,但仍将迭代次数保持在最低限度,我建议您像我所做的那样实现array_zip_combine。