帮助组合php中的两个多维数组


Help combining 2 multidimensional arrays in php

我一直是这里的读者,从来没有发布过,但我想知道是否有人可以帮助我解决一个问题,我有…

我有两个数组,它们是这样打印的:

$fields = Array
(
    [0] => Array
        (
            [field] => NewField
            [label] => New Field
            [required] => 1
        )
    [1] => Array
        (
            [field] => _Field2
            [label] => Field 2
            [required] => 0
        )
)

$fields_data = Array
(
    [0] => Array
        (
            [field_id] => 1
            [field_name] => New Field
            [db_name] => NewField
            [field_type] => text
        )
    [1] => Array
        (
            [field_id] => 6
            [field_name] => Field 2
            [db_name] => _Field2
            [field_type] => text
        )
)

我需要创建一个像这样的数组

$new_arr = Array
(
    [NewField] => Array
        (
            [field_id] => 1
            [field_name] => New Field
            [field_type] => text
            [label] => New Field
            [required] => 1
        )
    [_Field2] => Array
        (
            [field_id] => 6
            [field_name] => Field 2
            [field_type] => text
            [label] => Field 2
            [required] => 0
        )
)

那么db_name就变成了数组的键,然后与db_name相匹配的2个数组组合成一个数组。

这里是一些代码,我一直试图工作,但显然是不工作的原因(PHP不是我的强项):

foreach($fields as $field){
    $new_arr[$field['field']] = array();
foreach($fields_data as $tkey => $tval) {

if($fields_data[$tkey]['db_name'] = $fields['field']) {
$new_arr[$field['field']]['field_id'] = $fields_data[$tkey]['field_id'];
    }
    }
    }

显然,上面的代码只会在数组中创建field_id元素,但它是不工作的。我认为有2个循环是覆盖field_id值每次。但是正如我说过的,php不是我的强项,所以任何关于这方面的帮助都将是非常感激的。

谢谢

假设您正在合并两个数组,其中第一个数组中的label相等,第二个数组中的field_name相等(但我有一些疑问,因为您在结果数组中都有),这是正确的方法。

$newArray = array();
//create a map for o1 complexity
$fieldDataMap = array();
foreach($fields_data as $data){
    $fieldDataMap[$data['field_name']] = $data;
}
//walk over fields to fill newArray
foreach($fields as $field){
    $newArray[$field['field']] = array(
        'field_id' => $fieldDataMap[$field['label']]['field_id'],
        'field_name' => $fieldDataMap[$field['label']]['field_name'],
        'field_type' => $fieldDataMap[$field['label']]['field_type'],
        'label' => $field['label'],
        'required' => $field['required']
    );
}
print_r($newArray);

edit:这个解决方案对于只有2条记录来说似乎有点过分,但是当涉及到100+大小的数组时,它将在复杂度为0的情况下受益越来越多。

这段代码将把给定的两个数组转换为第三个数组。希望能有所帮助!可能需要一些调整,但希望它能解决你的问题。

$new_arr = array();
foreach( $fields as $field )
{
    foreach( $fields_data as $field_data )
    {
        if( $field['field'] == $field_data['db_name'] )
        {
            $new_arr[ $field['field'] ] = array_merge( $field, $field_data );
            unset( $new_arr[$field['field']]['field'], $new_arr[$field['field']]['db_name'] );
        }
    }
}

假设两个数组长度相同且元素顺序一致:

$newArr = array();
for($i = 0; $i <= count($fields); $i++) {
    $idx = $fields[$i]['field'];
    $newArr[$idx] = array_merge($fields[$i], $fields_data[$i];
}