2016-07-13 9 views
-1

私のjson結果が制限されないという問題に直面しています。 json結果には多数のデータが含まれています。データの一部を印刷できるように制限したい私のビューページで。どうやってやるの?ここでPHPを使用してJSON結果を制限する

は私のコードは、このコードは、すべての内容を出力し

$post1 = file_get_contents("........"); 
    $products = CJSON::decode($post1, true); 
    for($i=1;$i<=5;$i++) 
      { 
       echo "<pre>";print_r($products); 
      } 

です。これを手伝って、応答を待ってください。

$製品の出力。

Array 
    (
     [0] => Array 
      (
       [id] => 4380 
       [title] => 13 Thirteen Patch 
       [barcode] => PAT-2288 
       [qty] => 17 
       [url] => http://www.heygidday.biz/13-thirteen-motorcycle-club-mc-fun-embroidered-quality-new-biker-patch-pat-2288.html 
       [retail_price] => 4.99 
       [category] => Array 
        (
         [id] => 1 
         [name] => SMALL PATCHES 
        ) 

       [bin] => Array 
        (
         [id] => 1 
         [name] => A1 
        ) 

       [images] => Array 
        (
         [0] => Array 
          (
           [small] => http://www.heygidday.biz/portal//timthumb.php?src=/files/products/pat-2288-013678719880.jpg&w=30 
           [middle] => http://www.heygidday.biz/portal//timthumb.php?src=/files/products/pat-2288-013678719880.jpg&w=100 
           [source] => http://www.heygidday.biz/portal/files/products/pat-2288-013678719880.jpg 
          ) 

        ) 

      ) 
.................... 
[6619] => Array 
     (
      [id] => 12921 
      [title] => Special Police- BLACK Leather Key Fob 
      [barcode] => FOB-0435 
      [qty] => 1 
      [url] => 
      [retail_price] => 8.99 
      [category] => Array 
       (
        [id] => 54 
        [name] => KEY FOBS 
       ) 

      [bin] => Array 
       (
        [id] => 382 
        [name] => F10-21 
       ) 

      [images] => Array 
       (
       ) 

     ) 

) 

希望があります。

+0

単一の共有'$ products'に入っているデータサンプル?期待したことは、限られた要素で別の配列を作成する必要があると思います。 – C2486

+0

$製品をお送りいただきありがとうございます。それは本当に役に立ちます。私はあなたが "6000データ"の意味を理解していません。個々の行を意味するのか、最上位の配列要素を意味しますか? 'count($ products)'を出力するとどうなるでしょうか?そして明確にするために、正確に何をしようとしていますか?最初の5つの製品を印刷しますか? – BeetleJuice

+0

yeh、excatly、私は私のビューページで最初の5つの製品を印刷しようとしています。 –

答えて

0

を私はanswer.Thisを得た私が行っ方法です........

$data = file_get_contents("............",true); 
     $result = json_decode($data); 
     $prod = array(); 
     $i =0; 
     foreach($result as $rest){ 
     $product = json_decode(json_encode($rest),true); 
     foreach($product as $prods){ 
     $prod[] = array_merge($prods); 
     } 
     $new_array = array_slice($prod, 0, 5); 

     $this->render('index',array('model'=>$model,'products'=>$new_array)); 

     } 

ビューページ

<?php 
foreach($product as $prod): 
?> 
    <li style="width: 200px;"> 
      <?php 
       $img = array(); 

       foreach($prod['images'] as $img): 
       //echo $img['middle']; 
       echo CHtml::image($img['source'],'',array('alt'=>'Image 3')); 
       // $i++; 
       endforeach; 
      // echo CHtml::link($img,'detail'); 
      ?> 
       <div class="list-holder"> 
       <h4><?php echo $prod['title'];?></h4> 
       <div class="rating"> <span>$<?php echo $prod['retail_price'];?></span></div> 
      </div> 
      </li> 
      <?php 
      endforeach; 
     ?> 

は、このコードは、私の見解では最初の5つの製品を表示

コントローラー...すべての回答と時間のための おかげで...

0

変更:

echo "<pre>";print_r($products); 

へ:

echo "<pre>";print_r($products[$i]); 
+0

はエラー "未定義オフセット:1"を示します –

0

よりシンプルな答え

ちょうどあなたがしたい要素の数取り出すarray_sliceを使用します。

echo "<pre>"; 
print_r(array_slice($products,0,5)); 
echo "</pre>"; 

ベンの答えに私が指摘した落とし穴は、まだ関連しています。

オリジナル答え

print_r($products)は、ループを通過するたびに配列全体を出力します。 5に印刷された要素の数を制限するには、実行します。 はであなたのforループを交換してください:あなたがに対する保護手段を追加する必要があります

  1. :に注意する

    for($i=0;$i<(min(5,count($products)));$i++): 
        echo "<pre>"; 
        print_r(each($products)['value']); 
        echo "</pre>"; 
    endfor; 
    

    つの落とし穴ベンShovalの答えで配列の終わりを越えて$productsに3つの項目しかなく、5回ループするとエラーになります。私はmin(5,count($products)

  2. に最大$iセットを持っている理由は、各要素を参照するために、インデックス$iを使用する場合$productsという名前のキーの代わりに、インデックス0,1との連想配列が(ある場合は、あなたのコードは失敗しますです... )。私は、キー

    あなたが間違ったコードをした
+0

まだ変更なし...データ全体を表示します。 –

+0

これは、 '$ products'が6個未満の要素を持つ場合にのみ起こるはずです。最初の '$ products'を表示し、出力してください。私は投稿する前にテストしました。 – BeetleJuice

+0

$ productsの出力... –

0

が、あなたはJSONデコードresposne 5回印刷されているかわからないときに私は値にアクセスするためにeach($products)['value']を使用する理由です。 jsonで復号化されたレスポンスのキーを確認し、必要な特定のデータを取得しようとする必要があります。あなたは、応答の最初の5つの要素たい場合 :

は、例えば

$c = 0; 
foreach($products as $p){ 
    print_r($p); 
    $c++; 
    if($c == 5){ 
    break; 
    } 
} 
+0

同じ結果は、製品全体を出力します。 –

+0

json構造を理解する必要があります。最初にそれを解読している間にそれに応じてログインを適用することができます。 –

+0

あなたが投稿した配列を見ました。あなたがトップ5の製品を印刷して、前のコメントに自分のコードを使用したい場合は、製品結合配列です。 –

関連する問題