0

PHPを始めたばかりで、助けが必要です! これまでのところ、動画のカテゴリのリストがあり、この単純な foreach ループを使用して、すべてのカテゴリをリンク内に表示しています。今、私がやりたいのは、カテゴリ ID に基づいて、それらの一部のみを表示することです。

すべてのカテゴリを表示するコード:

$idx = 0;

foreach($this->categories as $category) 
{
  echo "\n".($idx++ ? '| ' : '').'<a href="'.KM_Helpers::getCategoryURL($category).'">'.$category['name'].'</a>';
}

ここで、ID が 2,8,21,22 のカテゴリのみを表示したいとします。$category['id'] を使用して IDS を取得できます。

表示したいIDのみを含む配列を持つことを考えていました...

$myarray = array(2, 8, 21, 22);

私の質問は、$category 配列をループして、配列に含まれる ID のみを表示するにはどうすればよいですか? ( $category['id'] に基づく)

どんな助けでも大歓迎です!

4

4 に答える 4

2

id の値が、categories 配列のインデックスと一致する場合は、必要なものだけをループできます。

foreach ($myarray as $id)
{
  $category = $this->categories[$id];
  echo "\n".($idx++ ? '| ' : '') .
    '<a href="' . KM_Helpers::getCategoryURL($category) . '">' .
     $category['name'] . '</a>';
}

in_arrayそれ以外の場合は、id が有効かどうかを確認するか、指定された有効な id を持つカテゴリを見つけるために、二重ループ (おそらく によって非表示) を実行する必要があります。

于 2012-04-26T14:14:51.117 に答える
1
$idx = 0;
$myarray = array(2, 8, 21, 22);
foreach($this->categories as $category) 
{
    if (!in_array($category['id'], $myarray)) {
        continue; // skip it if the id isn't in your array of accceptable IDs
    }
    echo "\n".($idx++ ? '| ' : '').'<a href="'.KM_Helpers::getCategoryURL($category).'">'.$category['name'].'</a>';
}
于 2012-04-26T14:14:33.680 に答える
1
$ids= array(2, 8, 21, 22);

$idx = 0;
foreach($this->categories as $id => $category){
    if (in_array($category['id'] , $ids)) {
        echo "\n".($idx++ ? '| ' : '').'<a href="'.KM_Helpers::getCategoryURL($category).'">'.$category['name'].'</a>';
    }
}
于 2012-04-26T14:15:05.340 に答える
1

問題ない。ID が「承認済み」ID のリストにあるかどうかをテストする簡単なロジックを追加します。

$idx = 0;
$myarray = array(2, 8, 21, 22);

foreach($this->categories as $category) 
{
    if(in_array($category['id'], $myarray)
    {
        echo "\n".($idx++ ? '| ' : '').'<a href="'.KM_Helpers::getCategoryURL($category).'">'.$category['name'].'</a>';
    }
}

これは、ループの各反復で $category['id'] をテストし、それが ID の配列にある場合は、リンクをエコーし​​ます。それ以外の場合、カテゴリ項目は無視され、ループが続行されます。

于 2012-04-26T14:16:25.877 に答える