Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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,我有这两个数组,我目前正在使用两个循环进行合并。我想知道是否有更好的方法合并这些阵列: $args = array( 'Name' => 'Test Name', 'Email' => 'root@localhost.com', 'Message' => 'There is no place like 127.0.0.1!' ); $fields = array( 2 => array( 'label' => 'Name', '

我有这两个数组,我目前正在使用两个循环进行合并。我想知道是否有更好的方法合并这些阵列:

$args = array(
  'Name' => 'Test Name', 
  'Email' => 'root@localhost.com', 
  'Message' => 'There is no place like 127.0.0.1!'
);

$fields = array(
  2 => array(
    'label' => 'Name',
    'id' => 2
  ),
  3 => array(
    'label' => 'Email',
    'id' => 3
  ),
  4 => array(
    'label' => 'Message',
    'id' => 4
  )
);
我正在尝试将它们合并到一个数组中,如下所示:

$merged = array(
  2 => array(
    'label' => 'Name',
    'id' => 2,
    'value' => 'Test Name'
  ),
  3 => array(
    'label' => 'Email',
    'id' => 3,
    'value' => 'root@localhost.com'
  ),
  4 => array(
    'label' => 'Message',
    'id' => 4,
    'value' => 'There is no place like 127.0.0.1!'
  )
);
我目前正在使用这个双foreach循环来完成这项工作:

foreach ( $args['fields'] as $k => $v ) {
        foreach( $fields['fields'] as $i => $item ) {
            if ( $item['label'] === $k ) {
                $fields['fields'][$i]['value'] = $v;
            }
        }
    }
我尝试过使用
array\u merge
array\u merge\u recurrisve
,但它会从
$字段中抛出数组键


有什么想法或更好的方法来尝试实现我想要的结果吗?

您不需要嵌套循环。只需在
$fields
数组上循环,然后使用索引访问
$args
中的相应条目

$merged = []
foreach ($fields as $key => &field) {
    $field['value'] = $args[$field['label']];
    $merged[$key] = $field;
}

你正在使用的方法有什么问题吗?我同意你正在使用的方法将是最有效的。。以防万一钥匙弄混了等等。。在我看来,您已经“正确地”完成了。实际的
$fields
数组中有更多的值,而仅仅为了找到一个匹配的字段而遍历所有字段似乎效率低下。@zeropsi PHP速度很快。如果你不循环数十万行,你可能会没事的。谢谢@GrumpyCrouton-虽然我希望我永远不会有那么多行可以循环,但很有可能有几千行。我认为,为了更好地衡量,并且为了确保增加一些逻辑,我将在代码中添加一个
break
,这样一旦匹配,它就会旋转出每个
的内部
foreach