2012-06-19 2 views
0

я использую следующий код, чтобы заполнить все пустые ключи в подмассивах с ``:Добавление элементов всех пустых ключей массива

$array = array(
     'note' => array('test', 'test1'), 
     'year' => array('2011','2010', '2012'), 
     'type' => array('conference', 'journal', 'conference'), 
    ); 

foreach ($array['type'] as $k => $v) { 
    foreach($array as $element => $a) { 
    $iterator = $array[$element]; 
    if(!isset($iterator[$k])){  
     $iterator[$key] = ''; 
    } 
    } 
} 

print_r ($ array);

Проблема в том, что она фактически не меняет элементы в $array, а во временной переменной $iterator.

Я знаю, что это простой вопрос, но я хотел бы найти лучшее и быстрое решение.

+0

Действительно ли он предназначен для обработки внутреннего массива во внешнем цикле и наоборот? – raina77ow

ответ

2

Вам не нужно переменную $ итератора, вы можете сделать только:

foreach ($array['type'] as $k => $v) { 
    foreach($array as $element => $a) { 
    if(!isset($array[$element][$k])){  
     $array[$element][$key] = ''; 
    } 
    } 
} 

Я бы также рекомендовал переключения внутренние и внешние петли, так что более читаемым и более эффективным.

foreach($array as $element => $a) { 
     foreach ($array['type'] as $k => $v) { 
     if(!isset($array[$element][$k])){  
      $array[$element][$key] = ''; 
     } 
     } 
    } 
+0

На самом деле, это странно, я не уверен, понял ли я, что вы действительно хотите, было бы неплохо, если бы вы могли опубликовать, как вы хотите, чтобы ваш последний массив был на вашем примере. –

2

Похоже, у вас есть опечатки. $key в середине циклов никогда не определяется. $a должно быть таким же значением, как $iterator[$k], поэтому его не нужно устанавливать.

Попробуйте это.

$array = array(
     'note' => array('test', 'test1'), 
     'year' => array('2011','2010', '2012'), 
     'type' => array('conference', 'journal', 'conference'), 
    ); 

foreach ($array as $k => $v) { 
    foreach($k as $element => $a) { 
    if(!isset($a)){  
     $array[$element] = ''; 
    } 
    } 
} 
+0

И что здесь делает внешняя петля? – raina77ow

+0

@ raina77ow, массив вложен. Он имеет 2 слоя глубины. – sparebytes

+1

Sigh .. ok, я бы спросил, как в вашем коде будут использоваться переменные '$ k' и' $ v'. – raina77ow

Смежные вопросы