2017-05-03 18 views
1

PHPを使用してjson配列データに問題があります。私はforeachを使ってデータをループし、[labels]の最初のリストだけがキャプチャされます。配列インデックス1以上のものはすべてキャプチャされません。json配列内のすべての[labels]にアクセスする方法

付属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

これを試してください、これがあなたを助けてくれることを願っています。 問題は、あなたが毎回それを上書きしますforeachループ内でこの文を使用していたこの

$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>'; 

ました。

PHPコード:不定variable`:

<?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通知を生成します。 'foreach'ループの前に' $ keywordfilters = '';を初期化する必要があります。 –

+0

いいえ、ループがデータを持つように実行されるため、通知が生成されません。とにかく変数を初期化するのは良い方法です。それは、ループに入ってこないときにのみ通知します。 – informer

+0

ループ内の '。= '演算子を連結すると通知がスローされます。 [例を参照してください](http://sandbox.onlinephpfunctions.com/code/d8fac8917ca391bc3a0db112986cc878bbcfec2d) –

関連する問題