2012-04-28 154 views
2

這裏(給出如下)是一些非常簡單的php解析多維數組的東西,我正在做的。我只是搜索'高亮'鍵,然後將一些鍵值對存儲在另一個數組中。有沒有更好的方法來實現這一點(我的意思是性能),而不是有任何foreach循環來達到你想要的。解析PHP多維數組

$json_O=json_decode(file_get_contents($url),true); 
    foreach($json_O as $section1=>$items1){ 
     if($section1==highlighting){ 
      foreach($items1 as $section2=>$items2){ 
        $key=$section2; 
        foreach($items2 as $section3=>$items3){ 
         foreach ($items3 as $section4=>$items4){ 
          $value=$items4; 
          $found[]=array('Key' => $key, 'Value' => $value); 

下面是一個簡單的PHP對象我試圖解析:

Array 
(
    [responseHeader] => Array 
     (
      [status] => 0 
      [QTime] => 3 
      [params] => Array 
       (
        [indent] => on 
        [start] => 0 
        [q] => russian 
        [fragsize] => 40 
        [hl.fl] => Data 
        [wt] => json 
        [hl] => on 
        [rows] => 8 
       ) 

     ) 

    [response] => Array 
     (
      [numFound] => 71199 
      [start] => 0 
      [docs] => Array 
...... 
...... 
    [highlighting] => Array 
     (
      [114360] => Array 
       (
        [Data] => Array 
         (
          [0] => AMEki has done it better <em>russian</em>... 

.... 
.... 

兩件事情現在:1)我能做到更快? 2)我可以更好地設計嗎?

回答

5

這似乎unneccesary

foreach($json_O as $section1=>$items1){ 
    if($section1==highlighting){ 
     foreach($items1 as $section2=>$items2){ 

,你可以簡單地做

 foreach($json_O['highlighting'] as $section2=>$items2){ 

簡化休息也是可能的,雖然這是未經測試

$riter = new RecursiveArrayIterator($json_O['highlighting']); 
$riteriter = new RecursiveIteratorIterator($riter, RecursiveIteratorIterator::LEAVES_ONLY); 
$found = array(); 
foreach ($riteriter as $key => $value) { 
    $key = $riteriter->getSubIterator($riteriter->getDepth() - 2)->key(); 
    $found[] = compact('key', 'value'); 
} 

個人而言,我會只用n但是,儘管有foreach循環。這很容易理解,而我的遞歸迭代器的創造性使用不是。

+0

奇妙的克里斯。謝謝!!! – 2012-04-28 16:31:53

2
foreach($json_O['highlighting'] as ...) { 
    ... 
} 

只是因爲它從JSON來了並不意味着你不能訪問它作爲一個正常的PHP數組,因爲它IS正常的PHP數組現在。

0

一些基準測試顯示for(;;)循環的性能更好,而不是foreach()。 當然數組元素的直接訪問是相當快

+2

我不認爲微優化是一個好主意嗎? – llamerr 2012-04-28 15:31:04

+0

idk,他問,如果他能做得更快) – heximal 2012-04-28 15:44:17

+0

那麼,這是一個答案,然後,直到他沒有澄清他的問題8) – llamerr 2012-04-28 15:57:23

1

使用的foreach,當你需要去每個項目。如果你只想要highlighting,那麼只需直接訪問它。

$higlighting = $json_0['highlighting']; 
foreach($highlightis as $Key => $value) { 
//.... 
}