Как сделать уникальный ассоциативный массив?
У меня есть массив, который я заполняю так:
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));
вы можете использовать этот метод
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);
?>