在具有相同属性的对象数组中查找项目

时间:2015-02-17 14:19:34

标签: php arrays

我有一个像这样的对象数组:

Array
(
    [0] => stdClass Object
        (
            [date] => 12.09.2015
            [title] =>  Testtitle3          
        )

    [1] => stdClass Object
        (
            [date] => 01.01.2015
            [title] =>  Testtitle3           
        )

    [2] => stdClass Object
        (
            [date] => 12.09.2015
            [title] =>  Testtitle3         
        )
}

现在我想通过数组(使用foreach)循环来检查日期是否是重复条目。如果是这样,在新数组中放置重复项以获得这样的输出(例如12.09.2015 - cos这在我的示例数组中是重复的):

{12.09.2015 - title1:Testtitle3,title2:Testtitle3}

所以基本上脚本应该在对象数组中找到重复的日期,并用两个标题(相同但非常重要)和一个日期回显它们。

我试过这样的事,但它不起作用:

foreach($array as &$item){
    foreach($array as &$itemCheck){
    if($item->date === $itemCheck->date){
    echo '{' . $item->date . ' - ' .    $item->title . ',' . $itemCheck->title . '}';
    }
    }
}
我很沮丧:)你可以再帮我一次吗? THX !!!

3 个答案:

答案 0 :(得分:0)

您应该将日期存储在变量

$temp = array();
foreach ($array as $item) {
    if (in_array($item->date, $temp)) {
       echo '{' . $item->date . ' - ' .    $item->title . ',' . $itemCheck->title . '}';
    } else {
        $temp[] = $item->date;
    }
}

答案 1 :(得分:0)

foreach($array as $item){
    if (isset($helper){
        foreach($helper as $helperitem){
              if($item->date === $helperitem->date){
                 echo '{' . $item->date . ' - ' .    $item->title . ',' . $helperitem->title . '}';

              }
        }
    }
    $helper[]=$item;
}

答案 2 :(得分:0)

您可以折叠数组,然后可以检入第二个循环。

$colapsedArray = array();
foreach($array as &$item){
    $colapsedArray[$item['date']][] = $item['title'];
} unset($item); //else you can have strange side effects in PHP

foreach($colapsedArray as &$item) {
   if (count($item) > 1) {
      //echo item
   }
} unset($item);

折叠后,$collapsedArray应如下所示:

Array
(
    [12.09.2015] => Array
        (
            'Testtitle3',  
            'Testtitle3'  
        )

    [01.01.2015] => Array
        (
            'Testtitle3'           
        )
)