2015-12-10 79 views
1

考慮下面的陣列結構:獲取參考項RecursiveIteratorIterator

$array = array('level1'=>array('level2'=>array('url'=>$url,'title'=>$title))); 

使用:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 

    foreach($iterator as $key=>$value) { 

     if(is_null($value)){ 
      echo $key.' -- '.$value.'<br />'; 
     } 
    } 

我可以附和了當值是空的,但我不知道是數組該項目的路徑

當這是一個更復雜的數組時,我需要知道具有null的路徑例如是$array['level1']['level2']['url']

目前我只知道它是url,不知道該物品的實際結構在哪裏。

使用這種迭代器方法,我該如何計算出路徑是什麼,以便在數組中的值爲空時更新數組中的項?

回答

1

您可以通過使用getDepthgetSubIterator函數實現理想的路徑。

對以下溶液來看看:

$url = null; 
$title = null; 
$array = array(
    'level1' => array(
     'level2' => array(
      'level3' => array(
       'url' => $url, 
       'title' => $title 
      ) 
     ), 

    ) 
); 

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 

foreach ($iterator as $key => $value) { 
    $keys = array(); 
    if (is_null($value)) { 
     $keys[] = $key; 
     for ($i = $iterator->getDepth() - 1; $i >= 0; $i--) { 
      $keys[] = $iterator->getSubIterator($i)->key(); 
     } 

     $key_paths = array_reverse($keys); 
     echo "'{$key}' have null value which path is: " . implode(' --> ', $key_paths) . '<br>'; 
    } 
} 

在上面的例子中$array有2個鍵與null值即URL標題。變量$key_paths包含慾望路徑並且上述腳本的輸出將是:

'url' have null value which path is: level1 --> level2 --> level3 --> url 
'title' have null value which path is: level1 --> level2 --> level3 --> title