2016-07-06 2 views
0

У меня есть два массива, один из которых содержит все параметры, а второй - значения по умолчанию.PHP-массив merge/map из двух массивов

The варианты массивов выглядит следующим образом:

$options = array(
    "SeriesA" => array(
     "A1" => array(
      "text" => "A1", 
      "value" => "A-001" 
     ), 
     "A2" => array(
      "text" => "A2", 
      "value" => "A-002" 
     ) 
    ), 
    "SeriesB" => array(
     "B1" => array(
      "text" => "B2", 
      "value" => "B-001" 
     ), 
     "B2" => array(
      "text" => "B2", 
      "value" => "B-002" 
     ) 
    ), 
); 

И у меня есть еще один массив, содержащий значение по умолчанию, и это выглядит как этот

$defaults= array(
    "SeriesA" => "A-002", 
    "SeriesB" => "B-001", 
); 

То, что я хотел бы закончить с одним массив, содержащий всю информацию, есть способ, которым я могу сопоставить оба массива и получить один массив, который будет выглядеть так:

$options = array(
    "SeriesA" => array(
     "A1" => array(
      "text" => "A1", 
      "value" => "A-001", 
      "default" => false 
     ), 
     "A2" => array(
      "text" => "A2", 
      "value" => "A-002", 
      "default" => true 
     ) 
    ), 
    "SeriesB" => array(
     "B1" => array(
      "text" => "B2", 
      "value" => "B-001", 
      "default" => true 
     ), 
     "B2" => array(
      "text" => "B2", 
      "value" => "B-002", 
      "default" => false 
     ) 
    ), 
); 
+0

Просто сделайте которым цикл Еогеаспа тестируют Wich массива в массиве серии по умолчанию, и поставить «по умолчанию» => истинное значение в массив. В каждом другом массиве в массиве рядов введите значение «default» => false. – Skayo

+0

Это из базы данных? Если это так, вы можете сделать все это в SQL. – nerdlyist

ответ

1

Вот два способа сделать это:

сделать функцию, которая принимает два аргумента и проверить значение в цикле с по умолчанию, добавить по умолчанию, и возвращает новый массив или отредактировать массив, передавая его по ссылке:

function awesomeName(&$options, $defaults) { 
    foreach ($options as $k => &$values) { 
     foreach ($values as &$AsAndBs) { 
      $AsAndBs['default'] = $AsAndBs['value'] == $defaults[$k]; 
     } 
    } 
} 

Используя функцию array_walk() с анонимной функцией:

array_walk($options, function (&$v, $k) use ($defaults) { 
    $series = $k; 
    foreach ($v as &$series_contents) { 
     $series_contents['default'] = $series_contents['value'] == $defaults[$series]; 
    } 
}); 
Смежные вопросы