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


Find item in object array with same property

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

大堆([0]=>stdClass对象([日期]=>2015年9月12日[title]=>测试标题3)[1] =>stdClass对象([日期]=>2015年1月1日[title]=>测试标题3)[2] =>stdClass对象([日期]=>2015年9月12日[title]=>测试标题3)}

现在我想要循环遍历数组(使用foreach),以检查日期是否是重复的条目。如果是这样的话,将重复项放入新数组中以获得这样的输出(2015年9月12日的示例,因为这在我的示例数组中是重复项):

{2015年9月12日-标题1:测试标题3,标题2:测试标题3}

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

我试过这样的东西,但不起作用:

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

我很沮丧:)伙计们,你们能再帮我一次吗?thx!!!

您应该将日期存储在变量中

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

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

$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'           
        )
)