2017-05-03 23 views
1

我在使用PHP的json數組數據時遇到問題。我使用一個foreach來遍歷數據,並且僅捕獲[標籤]的第一個列表。沒有捕獲數組索引1和更大的所有內容。如何訪問json數組中的所有[標籤]

在所包含的JSON,$keywordfilters將呼應:

「谷歌化,智能化,新聞稿,領導」從索引0

「的領導,新聞發佈」不會從索引1

捕獲

請幫忙。

PHP:

// Keyword Filters 
echo '<div class="sub-nav" role="menu">'; 

// Loop to get all keywords for filtering 
$recordcounter = 0; 
foreach($json->items as $jsondata){ 

    $keywordfilters = '<strong style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block;">Filter:</strong> <a href="#" role="menuitem" class="active" style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block; float: left;">All</a>'; 

    $keywordcounter = 0; 
    foreach($jsondata->labels as $keywordlabels){ 
     //foreach($keywordlabels as $labels){ 
      //strtolower,strtoupper,ucfirst,lcfirst 
      $keywordfilters .= '<a href="#" role="menuitem" style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block; float: left;">' . ucfirst($keywordlabels) . '</a>'; 

      $keywordcounter++; 
     //} 
    } 

    $recordcounter++; 
} 

echo $keywordfilters; 

echo '</div>'; 

JSON:

stdClass Object 
(
    [kind] => blogger#postList 
    [nextPageToken] => CgkIChiA48Lo_igQg4DLkK7p2Kke 
    [items] => Array 
     (
      [0] => stdClass Object 
       (
        [kind] => blogger#post 
        [id] => a123456789 
        [content] => TESTESTEST 

        [author] => stdClass Object 
         (
          [id] => sro5t7y4nte76vtcmhsazsdffsdy 
          [displayName] => MyDisplayName 
          [url] => https://www.blogger.com/profile/a1234567890 
          [image] => stdClass Object 
           (
            [url] => //lh6.googleusercontent.com/-3HzpopblNls/AAAAAAAAAAI/AAAAAAAADC8/YJsx2U5TQ9I/s35-c/photo.jpg 
           ) 

         ) 

        [labels] => Array 
         (
          [0] => Google 
          [1] => intelligence 
          [2] => press release 
          [3] => leadership 
         ) 

       ) 

      [1] => stdClass Object 
       (
        [kind] => blogger#post 
        [id] => b123456789 
        [content] => TESTESTEST 

        [author] => stdClass Object 
         (
          [id] => sro5t7y4nte76vtcmhsazsdffsdy 
          [displayName] => MyDisplayName 
          [url] => https://www.blogger.com/profile/a1234567890 
          [image] => stdClass Object 
           (
            [url] => //lh6.googleusercontent.com/-3Hz321blBls/AAABBBABACAAAI/AACCC76AADC8/YJsx2U5TQ9I/s35-c/photo.jpg 
           ) 

         ) 

        [labels] => Array 
         (
          [0] => leadership 
          [1] => press release 
         ) 

       ) 
     ) 

    [etag] => "rone8ryudb8ditsvmp8re8dt/oprdnyt75GRFYTUiofygjlhft8y" 
) 

回答

1

試試這個,希望這會幫助你。 問題是這個

$keywordfilters = '<strong style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block;">Filter:</strong> <a href="#" role="menuitem" class="active" style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block; float: left;">All</a>'; 

您正在使用foreach循環將覆蓋它每次內這一說法。

PHP代碼:

<?php 
ini_set('display_errors', 1); 
$string = '{ "kind" :"blogger#postList", "nextPageToken" :"CgkIChiA48Lo_igQg4DLkK7p2Kke", "items" : { "0" : { "kind" :"blogger#post", "id" :"a123456789", "content" :"TESTESTEST", "author" : { "id" :"sro5t7y4nte76vtcmhsazsdffsdy", "displayName" :"MyDisplayName", "url" :"https://www.blogger.com/profile/a1234567890", "image" : { "url" :"//lh6.googleusercontent.com/-3HzpopblNls/AAAAAAAAAAI/AAAAAAAADC8/YJsx2U5TQ9I/s35-c/photo.jpg"}}, "labels" : { "0" :"Google", "1" :"intelligence", "2" :"press release", "3" :"leadership"}}, "1" : { "kind" :"blogger#post", "id" :"b123456789", "content" :"TESTESTEST", "author" : { "id" :"sro5t7y4nte76vtcmhsazsdffsdy", "displayName" :"MyDisplayName", "url" :"https://www.blogger.com/profile/a1234567890", "image" : { "url" :"//lh6.googleusercontent.com/-3Hz321blBls/AAABBBABACAAAI/AACCC76AADC8/YJsx2U5TQ9I/s35-c/photo.jpg"}}, "labels" : { "0" :"leadership", "1" :"press release"}}}, "etag" :"rone8ryudb8ditsvmp8re8dt/oprdnyt75GRFYTUiofygjlhft8y" }'; 
$json=json_decode($string); 
echo '<div class="sub-nav" role="menu">'; 

// Loop to get all keywords for filtering 
$recordcounter = 0; 
$keywordfilters = '<strong style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block;">Filter:</strong> <a href="#" role="menuitem" class="active" style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block; float: left;">All</a>'; 
foreach($json->items as $jsondata){ 


    $keywordcounter = 0; 
    foreach($jsondata->labels as $keywordlabels){ 
     //foreach($keywordlabels as $labels){ 
      //strtolower,strtoupper,ucfirst,lcfirst 
      $keywordfilters .= '<a href="#" role="menuitem" style="margin: 0 3px 3px; padding: 3px 10px 3px 0; display: block; float: left;">' . ucfirst($keywordlabels) . '</a>'; 

      $keywordcounter++; 
     //} 
    } 

    $recordcounter++; 
} 

echo $keywordfilters; 
+0

非常感謝您分享解決方案。 – Pegues

+0

@Pegues歡迎朋友.... :) –

1

在每一個外循環: $ keywordfilters處於復位狀態。

$keywordfilters = '<strong style="margin: 0 3px 3px; padding: 3px 
    10px 3px 0; display: block;">Filter:</strong> <a href="#" 
    role="menuitem" class="active" style="margin: 0 3px 3px; padding: 
    3px 10px 3px 0; display: block; float: left;">All</a>'; 

您需要使用。=來追加上一個數組的數據。

$keywordfilters .= '<strong style... 
+1

它會產生'PHP公告:未定義variable'。你需要在'foreach'循環之前初始化'$ keywordfilters ='';''。 –

+0

不,它不會產生通知,因爲循環會有數據運行。反正它是一個很好的練習來初始化變量。只有當它不進入循環時它纔會發出通知。 – informer

+0

循環內的'。= ='運算符將會發出通知。 [見示例](http://sandbox.onlinephpfunctions.com/code/d8fac8917ca391bc3a0db112986cc878bbcfec2d) –