2010-09-13 97 views
0

我在下面有以下文字,解析它的最簡單方法是什麼?如何解析PHP中的信息?

if(typeof sa_inst.apiCB == 'function') sa_inst.apiCB({"AS":{"Query":"g","FullResults":1,"Results":[{"Type":"AS","Suggests":[{"Txt":"g<strong>oogle</strong>","Type":"AS","Sk":""},{"Txt":"g<strong>mail</strong>","Type":"AS","Sk":"AS1"},{"Txt":"g<strong>oogle</strong> <strong>maps</strong>","Type":"AS","Sk":"AS2"},{"Txt":"g<strong>oogle</strong> <strong>earth</strong>","Type":"AS","Sk":"AS3"},{"Txt":"g<strong>ames</strong>","Type":"AS","Sk":"AS4"},{"Txt":"g<strong>oogle</strong> <strong>images</strong>","Type":"AS","Sk":"AS5"},{"Txt":"g<strong>amestop</strong>","Type":"AS","Sk":"AS6"},{"Txt":"g<strong>rainger</strong>","Type":"AS","Sk":"AS7"}]}]}} /* pageview_candidate */); 

我想唯一得到的是後(「TXT」 :)但不包括<strong>或其他任何東西。例如,形成上面的文字我想獲得這樣的:

谷歌,Gmail,Google地圖,Google圖片等

在數組中。請幫助?

+0

你試圖從字面上解析的文本包含代碼,即你試圖解析什麼看起來像Javascript? – deceze 2010-09-13 06:35:44

+0

我不完全肯定是誠實的,但是這是通過調用API返回的。我只需要這些信息以不同的方式顯示它。 – user220755 2010-09-13 06:37:44

+0

...你不確定你想要解析什麼?你最好更好地研究這個API。似乎很奇怪,它應該返回一個不可用的JS塊。 – mpen 2010-09-13 07:20:35

回答

6

該文本是JSON。使用json_decode解析它。

$str = '{"AS":{"Query":"g","FullResults":1,"Results":[{"Type":"AS","Suggests":[{"Txt":"g<strong>oogle</strong>","Type":"AS","Sk":""},{"Txt":"g<strong>mail</strong>","Type":"AS","Sk":"AS1"},{"Txt":"g<strong>oogle</strong> <strong>maps</strong>","Type":"AS","Sk":"AS2"},{"Txt":"g<strong>oogle</strong> <strong>earth</strong>","Type":"AS","Sk":"AS3"},{"Txt":"g<strong>ames</strong>","Type":"AS","Sk":"AS4"},{"Txt":"g<strong>oogle</strong> <strong>images</strong>","Type":"AS","Sk":"AS5"},{"Txt":"g<strong>amestop</strong>","Type":"AS","Sk":"AS6"},{"Txt":"g<strong>rainger</strong>","Type":"AS","Sk":"AS7"}]}]}}'; 

$result = json_decode($str); 

//Show all 'Txt' values 
foreach($result->AS->Results[0]->Suggests as $suggests) 
echo "Txt contains: ".htmlspecialchars($suggests->Txt). "<br/>"; 

//Show full contents of result 
echo "<pre>"; 
print_r($result); 

該輸出Txt第一的價值觀:

Txt contains: g<strong>mail</strong> 
Txt contains: g<strong>oogle</strong> <strong>maps</strong> 
Txt contains: g<strong>oogle</strong> <strong>earth</strong> 
Txt contains: g<strong>ames</strong> 
Txt contains: g<strong>oogle</strong> <strong>images</strong> 
Txt contains: g<strong>amestop</strong> 
Txt contains: g<strong>rainger</strong> 

,然後將完整JSON數據量太大:

stdClass Object 
(
    [AS] => stdClass Object 
     (
      [Query] => g 
      [FullResults] => 1 
      [Results] => Array 
       (
        [0] => stdClass Object 
         (
          [Type] => AS 
          [Suggests] => Array 
           (
            [0] => stdClass Object 
             (
              [Txt] => google 
              [Type] => AS 
              [Sk] => 
             ) 

            [1] => stdClass Object 
             (
              [Txt] => gmail 
              [Type] => AS 
              [Sk] => AS1 
             ) 

            [2] => stdClass Object 
             (
              [Txt] => google maps 
              [Type] => AS 
              [Sk] => AS2 
             ) 

            [3] => stdClass Object 
             (
              [Txt] => google earth 
              [Type] => AS 
              [Sk] => AS3 
             ) 

            [4] => stdClass Object 
             (
              [Txt] => games 
              [Type] => AS 
              [Sk] => AS4 
             ) 

            [5] => stdClass Object 
             (
              [Txt] => google images 
              [Type] => AS 
              [Sk] => AS5 
             ) 

            [6] => stdClass Object 
             (
              [Txt] => gamestop 
              [Type] => AS 
              [Sk] => AS6 
             ) 

            [7] => stdClass Object 
             (
              [Txt] => grainger 
              [Type] => AS 
              [Sk] => AS7 
             ) 

           ) 

         ) 

       ) 

     ) 

) 
0

這是可行的,但我 '從' 功能刪除'

<?php 
    echo $text = 'if(typeof sa_inst.apiCB == function sa_inst.apiCB({"AS":{"Query":"g","FullResults":1,"Results":[{"Type":"AS","Suggests":[{"Txt":"g<strong>oogle</strong>","Type":"AS","Sk":""},{"Txt":"g<strong>mail</strong>","Type":"AS","Sk":"AS1"},{"Txt":"g<strong>oogle</strong> <strong>maps</strong>","Type":"AS","Sk":"AS2"},{"Txt":"g<strong>oogle</strong> <strong>earth</strong>","Type":"AS","Sk":"AS3"},{"Txt":"g<strong>ames</strong>","Type":"AS","Sk":"AS4"},{"Txt":"g<strong>oogle</strong> <strong>images</strong>","Type":"AS","Sk":"AS5"},{"Txt":"g<strong>amestop</strong>","Type":"AS","Sk":"AS6"},{"Txt":"g<strong>rainger</strong>","Type":"AS","Sk":"AS7"}]}]}} /* pageview_candidate */);'; 
    echo '<br />'; 
    $text = strip_tags($text); // remove html tags 
    $a = explode('"Txt":"', $text); 
    $app = array(); 
    foreach ($a as $c) { 
     $b = explode('"', $c); 
     $app = $b[0]; 
    } 
    unset($app[0]); 
    var_dump($app); 
?>