我有一个数组,看起来像这样:
$date_data = array(
$date_title => array(
'title' => get_field('jahr'),
'permalink' => get_the_permalink(),
)
);
这个数组在一个循环中,并被压入数组$archive_years
。如果$date_title
的值已经作为键存在于数组中,我不希望它被复制,所以这些值应该被压入现有的键。
目前的情况是这样的:
array(2) {
[0]=>
array(1) {
["2020 - 2010"]=>
array(2) {
["title"]=>
string(4) "2013"
["permalink"]=>
string(68) "http://example.com"
}
}
[1]=>
array(1) {
["2020 - 2010"]=>
array(2) {
["title"]=>
string(4) "2016"
["permalink"]=>
string(66) "http://example.com/example"
}
}
}
如您所见,2020 - 2010
列出了两次,如何将值(get_field('jahr')
和get_the_permalink()
)分配给现有的键,以避免重复的键?
这是完整的代码:
$archive_years = array();
$args = array( 'post_type' => 'archiv');
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post();
// Specify the interval
$date_up = ceil(get_field('jahr') / 10) * 10;
$date_down = ceil(get_field('jahr') / 10) * 10 - 10;
$date_title = $date_up . ' - ' . $date_down;
$date_data = array(
$date_title => array(
'title' => get_field('jahr'),
'permalink' => get_the_permalink(),
)
);
if (!array_key_exists($date_title, $archive_years)) {
array_push($archive_years, $date_data);
}
endwhile;
foreach ($archive_years as $key => $value) {
foreach ($value as $k => $v) {
echo '
<button type="button" class="btn btn-info collapsible" data-toggle="collapse" data-target="#archiv_'. $v['title'] .'">'. $k .'</button>
<div id="archiv_'. $v['title'] .'" class="collapse">
<a href="'. $v["permalink"] .'">'. $v["title"] .'</a><br>
</div>';
}
}
var_dump($archive_years);
4条答案
按热度按时间rm5edbpk1#
我觉得你想要的是
array_merge
而不是array_push
http://php.net/manual/en/function.array-merge.php
aoyhnmkz2#
这个数组结构对你的目的来说毫无意义。你想要少一层数组,只要:
要做到这一点,只需:
toe950273#
这样,您就可以检查密钥是否存在,并将其推送到数组中:
jc3wubiy4#
你的逻辑中有一个错误,请看下面的代码片段:
回想一下,
array_key_exists()
的documented定义如下:因此,你试图使用的“一个数组 * 键”* 本身就是一个数组,你不能这么做。(但是,PHP可能不会告诉你这一点。它可能只是做了错误的事情。)
你必须包含一个 loop 来搜索数组,将每个元素与
$date_title
进行深度比较,以确定它是否已经存在,或者,你可能希望使用 another 数组,比如由title
索引的数组,来快速确定某个特定的标题之前是否已经被提到过。进一步扩展上述概念,您可以通过
title
和permalink
的“连接”来索引“另一个数组”,以便快速检测到这两个值的任何“组合”以前出现过。在任何情况下,修改程序的设计都是必要的。