Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中组合三个数组_Php_Arrays - Fatal编程技术网

如何在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。