I have these two arrays that I am currently using two loops to merge. I was wondering if there was a better way to merge these 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',
    'id' => 2
  ),
  3 => array(
    'label' => 'Email',
    'id' => 3
  ),
  4 => array(
    'label' => 'Message',
    'id' => 4
  )
);
I am trying to merge them into an array like this:
$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!'
  )
);
I am currently using this dual foreach loop to do it:
foreach ( $args['fields'] as $k => $v ) {
        foreach( $fields['fields'] as $i => $item ) {
            if ( $item['label'] === $k ) {
                $fields['fields'][$i]['value'] = $v;
            }
        }
    }
I have tried using array_merge and array_merge_recurisve, but it throws off the array keys from the $fields array.
Any thoughts or better approaches to try and achieve my desired outcome?
Advertisement
Answer
You don’t need nested loops. Just loop over the $fields array, and then access the corresponding entry in $args with an index.
$merged = []
foreach ($fields as $key => &field) {
    $field['value'] = $args[$field['label']];
    $merged[$key] = $field;
}