Удалить дубликаты объектов, которые имеют одинаковое значение для определенного ключа (wordpress: не получать сообщения с одинаковым заголовком) - PullRequest
0 голосов
/ 26 июля 2011

Я искал везде, но нигде не могу найти ответ, и я новичок в php, поэтому я надеюсь, что найдется кто-то, кто так любезно поможет мне. я работаю с WordPress и использую эту строку

$post_IDs = get_posts('category_name=glicinie');

для извлечения всех сообщений в категории, но в этой категории у меня много дубликатов сообщений, вот часть массива, которую я получаю [с print_r ($ post_IDs)] *

Array ( 
[0] => stdClass Object 
( [ID] => 761 [post_author] => 2 [post_date] => 2011-07-26 12:07:17 
[post_title] => Flower )
[1] => stdClass Object
( [ID] => 760 [post_author] => 2 [post_date] => 2011-07-26 12:04:46   
[post_title] => Rainbow )
[2] => stdClass Object 
( [ID] => 770 [post_author] => 2 [post_date] => 2011-07-26 12:03:18 
[post_title] => Coconut )
[3] => stdClass Object 
( [ID] => 743 [post_author] => 5 [post_date] => 2011-07-26 11:38:48 
[post_title] => Coconut )
)

после этого я использую этот код ниже, чтобы заполнить выбор в форме заголовком и годом (это настраиваемое поле сообщения) для каждого сообщения.

foreach ($post_IDs as $post_ID) { 
$anno = get_post_meta($post_ID->ID, 'year', true); 
$title = $post_ID->post_title;
echo '<option value="'.$title.'">' . '[' . $year . '] ' . $title . '</option>'; 
}

теперь вы уже видели, что у меня есть две записи под названием "Кокос" ... поэтому в списке в форме я получу сообщение "Кокос", отображаемое дважды. то, что я хочу, это однозначно отображать дублированные сообщения (например, «Кокос») только один раз .. я думаю, что я должен сделать своего рода проверку массива перед foreach, но я не знаю как ... так что в foreach я зацикливаюсь только через идентификаторы, которые имеют другое значение "post_title" ... но как?

прости мой английский. заранее спасибо :)

1 Ответ

0 голосов
/ 16 августа 2011

Я думаю, что это должно сделать.

$got = array();
foreach($post_IDs as $i => $d)
{
    if(!in_array($d[post_title]),$got)
    {
        $got[] = $d[post_title];
        $out[] = $d;
    }
}
print_r($out);
...