我一直是这里的读者,从来没有发布过,但我想知道是否有人可以帮助我解决一个问题,我有…
我有两个数组,它们是这样打印的:
$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];
}