0

我试图从一个充满新闻项目及其参数的数组中获取特定值。

我的数组有 25 个项目,来自 6 个不同的类别,我只需要获取类别名称而不是 25 次。如果我不完全清楚,就这么说吧

这是print_r($this->primary)

Array(
    [0] => stdClass Object
        (
         [title]=> Title 1
         [categoryname]=> Cat1
         [categoryid]=> 2
        )
   [1] => stdClass Object
        (
         [title]=> Title 2
         [categoryname]=> Cat1
         [categoryid]=> 2
        )


   [2] => stdClass Object
        (
         [title]=> Title 3
         [categoryname]=> Cat2
         [categoryid]=> 3
        )
   [3] => stdClass Object
        (
         [title]=> Title 4
         [categoryname]=> Cat2
         [categoryid]=> 3
        )
)

我的循环是:

for each ($getids->categories as $key=>$mycategory)
{
    echo ' <h2> CAT NAME SHOULD GO HERE</h2> ';
    for each ($this->primary as $key=>$item){
        if ($mycategory == $item->categoryid){
            echo $item->title;
        }
    }
}

问题是我在开始之前需要类别名称for each。愚蠢的是,$getids->categories除了类别 ID 之外,没有给我任何其他信息。我无法获取它,$this->primary[0]因为这些项目不是按类别分组的,而是如您在上面看到的那样滚入数组中,

任何帮助表示赞赏。谢谢!

编辑:这是print_r($getids->categories)

 Array
 (
     [0] => 11
     [1] => 14
     [2] => 12
     [3] => 13
     [4] => 15
     [5] => 21
     [6] => 20
     [7] => 29
 )
4

3 回答 3

1

使用您当前的设置,您别无选择,只能调用 categoryName 25 次。如果您想避免这样做,我会考虑重构您的代码,以便 $this->primary 不会填充所有内容。假设您从模型中获取这些值,您可以将模型函数更改为按类别名称进行限制。

foreach($categoryNames as $categoryName) {
    $this->primaryArray[$categoryName] = Foo.getByCategoryName($categoryName);
}

foreach($this->primaryArray as $categoryName => $primary) {
    echo '<h2>' . $categoryName . '</h2>';
    foreach($primary as $key=>$item){
        echo $item->title;
    }
}

编辑

按类别排序(尽管您仍将调用 25 次):

$primaryArray = array();

// sort array by category
foreach($this->primary as $value) {
    $primaryArray[$value->categoryName] = $value;
}

foreach($primaryArray as $categoryName => $primary) {
    echo '<h2>' . $categoryName . '</h2>';
    foreach($primary as $key=>$item){
        echo $item->title;
    }
}
于 2012-08-17T05:59:06.750 回答
1

假设您想保留 $getids->categories 返回的类别顺序,您可以尝试以下操作:

//Group items by category.
$itemsByCategory = array()
foreach($this->primary as $item) {
    if ( !isset($itemsByCategory[$item->categoryid] ) {
        $itemsByCategory[$item->categoryid] = array();
    }
    $itemsByCategory[$item->categoryid][] = $item;
}

//Print items in each category.
foreach($getids->categories as $mycategory):
    if ( isset($itemsByCategory[$mycategory]) ) {
        $categoryName = $itemsByCategory[$mycategory][0]->categoryname;
        echo '<h2>', $categoryName ,'</h2>';
        foreach($$temsByCategory[$mycategory] as $key=>$item){
           echo $item->title;
        }
    }

endforeach;
于 2012-08-17T06:10:33.170 回答
1

看看这是否适合你,

foreach($this->primary as $key=>$item)
{
    $headingPrinted = false;
    foreach($getids->categories as $key=>$catID) {
        if($catID == $item->categoryid){
            if (!$headingPrinted) {
                echo '<h2>'.$item->categoryname.'</h2>';
                $headingPrinted = true;
            }
            echo $item->title;
        }
    }
}
于 2012-08-17T06:20:52.487 回答