2015-07-04 3 views
3

У меня есть следующие:Сгладить многомерный массив, но сохранить ключи?

[6199]=> 
    array(12) { 
    ["Origin"]=> 
    array(3) { 
     ["name"]=> 
     array(1) { 
     [0]=> 
     string(4) "Cuba" 
     } 
     ["slug"]=> 
     array(1) { 
     [0]=> 
     string(27) "cuabn-havana-habanos-cigars" 
     } 
     ["id"]=> 
     array(1) { 
     [0]=> 
     int(0) 
     } 
    } 
    ["Filler"]=> 
    array(3) { 
     ["name"]=> 
     array(2) { 
     [0]=> 
     string(9) "Dominican" 
     [1]=> 
     string(10) "Nicaraguan" 
     } 
     ["slug"]=> 
     array(2) { 
     [0]=> 
     string(9) "dominican" 
     [1]=> 
     string(10) "nicaraguan" 
     } 
     ["id"]=> 
     array(2) { 
     [0]=> 
     int(0) 
     [1]=> 
     int(1) 
     } 
    } 
    } 
    [6192]=> 
    array(11) { 
    ["Origin"]=> 
    array(3) { 
     ["name"]=> 
     array(1) { 
     [0]=> 
     string(9) "Nicaragua" 
     } 
     ["slug"]=> 
     array(1) { 
     [0]=> 
     string(27) "nicaraguan-new-world-cigars" 
     } 
     ["id"]=> 
     array(1) { 
     [0]=> 
     int(0) 
     } 
    } 
    ["Filler"]=> 
     array(3) { 
     ["name"]=> 
     array(2) { 
      [0]=> 
      string(9) "Java" 
      [1]=> 
      string(10) "Nicaraguan" 
     } 
     ["slug"]=> 
     array(2) { 
      [0]=> 
      string(9) "java" 
      [1]=> 
      string(10) "nicaraguan" 
     } 
     ["id"]=> 
     array(2) { 
      [0]=> 
      int(0) 
      [1]=> 
      int(1) 
     } 
     } 
    } 

и мой ожидается выход:

array(12) { 
    ["Origin"]=> 
    array(3) { 
     ["name"]=> 
     array(1) { 
     [0]=> 
     string(4) "Cuba". 
     [1]=> 
     string(9) "Nicaragua" 
     } 
     ["slug"]=> 
     array(1) { 
     [0]=> 
     string(27) "cuabn-havana-habanos-cigars", 
     [0]=> 
     string(27) "nicaraguan-new-world-cigars" 
     } 
     ["id"]=> 
     array(1) { 
     [0]=> 
     int(0) 
     } 
    } 
    ["Filler"]=> 
    array(3) { 
     ["name"]=> 
     array(2) { 
     [0]=> 
     string(9) "Dominican" 
     [1]=> 
     string(10) "Nicaraguan" 
     [2]=> 
     string(9) "Java" 
     } 
     ["slug"]=> 
     array(2) { 
     [0]=> 
     string(9) "dominican" 
     [1]=> 
     string(10) "nicaraguan" 
     [3]=> 
     string(9) "java" 
     } 
     ["id"]=> 
     array(2) { 
     [0]=> 
     int(0) 
     [1]=> 
     int(1) 
     } 
    } 

Посмотрите, как он устраняет дубликаты и объединяет каждый массив сохраняя ключ «происхождения». Я пробовал:

foreach ($resultterms as $keyname => $valuename){ 

    foreach ($valuename as $keysub => $valuesub) { 

     foreach($valuesub['name'] as $keysubsub => $valuesubsub){ 

     # code... 
     $prods_atts[$keysub]['name'][$keysubsub] = $valuesubsub; 
     $prods_atts[$keysub]['slug'][$keysubsub] = $valuesub['slug'][$keysubsub]; 
     $prods_atts[$keysub]['id'][$keysubsub] = $valuesub['id'][$keysubsub]; 

     } 
    } 

    } 

$resultterms где есть оригинальные массивы, но это не работает. Мне было интересно, есть ли замечательная функция php, которую я мог бы использовать, чтобы объединить их, а не так много вложенных для каждой петли?

+0

Возможно, 'call_user_func_array ('array_merge_recursive', $ resultterms);'? –

ответ

2

Я считаю, что вы просто ищете array_merge_recursive.

call_user_func_array('array_merge_recursive', array_values($prod_atts)); 
  • call_user_func_array позволяет преобразовать массив в список аргументов
  • array_values, потому что, в конце концов, вы, кажется, хотят, чтобы избавиться от первого слоя вашего массива

В попробуйте, не могли бы вы разместить var_export вашей переменной вместо var_dump?

echo(var_export($prod_atts, true)); 
1

объединить массив любым предложенным методом. После этого вы получите дублированные значения. И вам нужно сохранить только уникальные предметы

$new = array_merge_recursive($resultterms['6199'], $resultterms['6192']); 

foreach($new['Origin'] as &$item) { $item = array_unique($item); } 
foreach($new['Filler'] as &$item) { $item = array_unique($item); } 
Смежные вопросы