Как сделать уникальный ассоциативный массив?

У меня есть массив, который я заполняю так:

array_push($comboUserPosts, 
    array(
        'link'=> get_permalink(),
        'dates'=> $value,
        'title'=> get_the_title()
    )
);

Затем, когда я заканчиваю весь цикл, я делаю:

array_unique($comboUserPosts);

Но это все равно дает мне дубликаты. Если я сделаю:

echo '<pre>' . var_export($comboUserPosts, true) . '</pre>';

Вот что я получаю:

array (
  0 => 
  array (
    'link' => 'https://example.com/test/test-values-users/',
    'dates' => '1920',
    'title' => 'test values users',
  ),
  1 => 
  array (
    'link' => 'https://example.com/test/test-values-users/',
    'dates' => ' 1954',
    'title' => 'test values users',
  ),
  2 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1600',
    'title' => 'provo filter',
  ),
  3 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1450',
    'title' => 'provo filter',
  ),
  4 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1330',
    'title' => 'provo filter',
  ),
)

Но, глядя на это, у меня есть только 2 уникальные ссылки и заголовок, я должен отображать только эти две ссылки + заголовок, когда я делаю:

foreach ($comboUserPosts as $value) { ?>
    <h2><a href="<?php echo $value['link']; ?>"><?php echo $value['title']; ?></a>
<?php }

3 ответа

Решение

Самым простым, что я могу придумать, является индексирование массива по ссылке (используя array_column()), а затем просто извлечь значения...

$comboUserPosts = array_values(array_column($comboUserPosts, null, 'link'));
echo var_export($comboUserPosts, true);

С вашими данными испытаний выше это дает...

array (
  0 => 
  array (
    'link' => 'https://example.com/test/test-values-users/',
    'dates' => ' 1954',
    'title' => 'test values users',
  ),
  1 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1330',
    'title' => 'provo filter',
  ),
)

Вам просто нужно удалить элементы dates сначала используйте array_unique

foreach($arr as $k=> &$v){
  unset($v['dates']);
}
print_r(array_unique($arr, SORT_REGULAR));

Live Demo

вы можете использовать этот метод

array_unique($associativeArray,SORT_REGULAR);

Определите ассоциативный массив $associativeArray с ключами имени и возраста.

  $associativeArray[] = array("name" => "Yogesh Singh","no"=>4);
  $associativeArray[] = array("name" => "Sonarika Singh","no"=>4);

Вы можете написать код, подобный этому

<?php 
$ar = array (
  0 => 
  array (
    'link' => 'https://example.com/test/test-values-users/',
    'dates' => '1920',
    'title' => 'test values users',
  ),
  1 => 
  array (
    'link' => 'https://example.com/test/test-values-users/',
    'dates' => ' 1954',
    'title' => 'test values users',
  ),
  2 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1600',
    'title' => 'provo filter',
  ),
  3 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1450',
    'title' => 'provo filter',
  ),
  4 => 
  array (
    'link' => 'https://example.com/test/provo-filter/',
    'dates' => '1330',
    'title' => 'provo filter',
  ),
);
function unique_multidimensional_array($array, $key) { 
            $temp_array = array(); 
            $i = 0; 
            $key_array = array(); 

            foreach($array as $val) { 
                if (!in_array($val[$key], $key_array)) { 
                    $key_array[$i] = $val[$key]; 
                    $temp_array[$i] = $val; 
                } 
                $i++; 
            } 
            return $temp_array; 
        } 
$unique = unique_multidimensional_array($ar, 'link');
echo "<pre>";
print_r($unique);

?>
Другие вопросы по тегам