2017-01-13 14 views
0

foreachループが忙しいですが、問題が見つかりません。 このコードは最初の配列のみを表示して停止します。問題はforeachループの配列から発生します。ここでforeachの配列は最初の配列のみを表示します

は私のコードです:

<?php 
$catarray = array(); 
$catslug = array(); 

while (have_posts()) : the_post(); 
    global $post; 
    $terms = get_the_terms($post->ID, 'product_cat'); 

    foreach ($terms as $term) { 
     $array2 = array ( 
      'name' => $term->name, 
      'slug' => $term->slug, 
      'id' => $term->term_id 
     ); 

     $product_cat = $array2; 
     //$product_cat = $term->name; 
     break; 
    } 
    array_push($catarray, $product_cat); 
endwhile; 

$categorielijst = array_unique($catarray); 

echo '<pre>'; 
print_r($categorielijst); 
echo '</pre>'; 

?> 

結果は次のとおりです。

Array 
(
    [0] => Array 
     (
      [name] => Salades 
      [slug] => salades 
      [id] => 67 
     ) 

) 

と私は $ product_cat = $配列2を変更した場合、 の場合 $ product_cat = $ term-> name;

以上が出力されます:

Array 
(
    [0] => Salades 
    [1] => Aardappels 
    [3] => Diverse fruit 
    [4] => Blad groentes 
    [5] => Schulp sappen 100% fruit en groentes 
    [8] => Groentes 
    [11] => Uien 
    [13] => Verse kruiden 
    [19] => Dressings kiooms 
    [25] => Appels 
    [28] => Paddenstoelen 
    [32] => Tomaten 
    [34] => Bananen 
    [35] => Citrus fruit 
    [37] => Peren 
    [49] => Verse sla 
) 
+0

望ましい結果は何ですか? –

+0

何私がしたいことは次のとおりです。 'アレイ ( [0] =>アレイ ( [名] => Salades [スラッグ] => salades [ID] => 67 ) [1] =>アレイ ( [名] => aardappels [スラグ] => aardappels [ID] => 23 ) [3] =>配列 ( [名] =>多様な果実 [スラグ] =>多様な果実 [id] => 11 ) ' など – Gurdt

+2

なぜあなたは' break;を呼び出していますか?これはループから抜け出すでしょうか? – atoms

答えて

1

は、以下のように動作するようにあなたのforeachを変更してみてください:

Array ([0] => Array ([name] => Salades [slug] => salades [id] => 67) [1] => Array ([name] => Aardappels [slug] => aardappels [id] => 23) [3] => Array ([name] => Diverse fruit [slug] => diverse-fruit [id] => 11) 

ブレイク:

foreach ($terms as $term) { 

    $array2 = array ( 
     'name' => $term->name, 
     'slug' => $term->slug, 
     'id' => $term->term_id 
    ); 





    $product_cat[] = $array2; 
} 

要求として、出力は次のようなものでなければなりません1回の繰り返しの後にループを終了させて​​いました。そして、あなたはproduct_cat[]

UPDATEでそれを追加しない限り、あなたはproduct_catを上書きすることになるSougataで述べたように:あなたは配列をソートすると「ID」は一意であると仮定すると:

foreach ($terms as $term) { 

    // check if its set, if not add it! 
    if(!isset($product_cat[$term->term_id])){ 
     $product_cat[$term->term_id] = array('name'=>$term->name, 'slug' => $term->slug); 
    } 

} 
+0

出力結果は、次のとおり 'アレイ ( [0] =>配列 ( [0] =>配列 ( [名] => Salades [スラグ] => salades [ID] => 67 ) ) ) ' – Gurdt

+0

はまだ最初の反復だけですか?もしあなたのDB呼び出しがあなたが期待しているデータを返すことを確認したら – atoms

+0

正しい結果が得られました。複製された配列をフィルタリングしたいと思います。もし 'array_unique($ product_cat);' .. – Gurdt

0

は、単に

を削除しますbreak;

と入れ

array_push($catarray, $product_cat);

foreachループに

$catarray = array(); 
while (have_posts()) : the_post(); 
    global $post; 
    $terms = get_the_terms($post->ID, 'product_cat'); 

    foreach ($terms as $term) { 
     $array2 = array ( 
      'name' => $term->name, 
      'slug' => $term->slug, 
      'id' => $term->term_id 
     ); 

     array_push($catarray, $array2); 
    } 

endwhile; 
$categorielijst = array_unique($catarray); 

echo '<pre>'; 
print_r($categorielijst); 
echo '</pre>'; 
+0

これを試して、最初の配列を得る.. – Gurdt

+0

こんにちは、解決策は良かった。しかし、それはページされたページなので、ページ1ではすべての用語が表示されず、ページ2では異なると表示されます。しかし、私はすべての条件を取得したい。 – Gurdt

関連する問題