Conditionally Combine PHP Array -


is there clean way combine 2 php arrays conditionally? following json-response both arrays separately:

1st array:

[       {         "field": {           "id": 20,           "name": "erfolge",           "field-id": "erfolge",           "type": "textarea"         }       },       {         "field": {           "id": 29,           "name": "sprachen",           "field-id": "sprachen",           "type": "text"         }       } ] 

2nd array:

    [   {     "field": {       "id": 20,       "name": "erfolge",       "field-id": "erfolge",       "type": "textarea"     },     "value": "new entry"   },   {     "field": {       "id": 4,       "name": "trikotnummer",       "field-id": "trikotnummer",       "type": "number"     },     "value": "test"   },   {     "field": {       "id": 29,       "name": "sprachen",       "field-id": "sprachen",       "type": "text"     },     "value": "text"   } ] 

i want following target output:

    [       {         "field": {           "id": 20,           "name": "erfolge",           "field-id": "erfolge",           "type": "textarea"         },         value: "new entry"       },       {         "field": {           "id": 29,           "name": "sprachen",           "field-id": "sprachen",           "type": "text"         },         value: "text"       } ] 

that means must add values if field exists in 1st array. current solution gives me fields without correct mapping:

$fielddata = array();     foreach ($fields $field) {         $fielddata[]['fields'] = $field->getarraycopy();     }      // values     $values = $user->getprofilefieldvalue();      $fieldvalue = array();     foreach ($values $value) {         $fieldvalue[] = $value->getarraycopy();     }      $result = array_merge($fielddata, $fieldvalue); 

should use function array_walk?

this expensive way it, searches second array looking element matching id first array.

$result = array(); foreach ($first $e1) {     $id = $e1['field']['id'];     foreach ($secondarray $e2) {         if ($e2['field']['id'] == $id) {             $e1['value'] = $e2['value'];             break;         }     }     $result[] = $e1; } 

if second array large, can optimize first creating associative array key ids second array , values values.


Comments