我有一个如下所示的数组:
$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);
答案 0 :(得分:0)
我认为你想要的是array_merge
而不是array_push
答案 1 :(得分:0)
array(2) {
[0]=>
array(1) {
["2020 - 2010"]=> ...
}
[1]=>
array(1) {
["2020 - 2010"]=> ...
}
}
这个数组结构对于您的目的来说是无稽之谈。您只需要一个级别的数组:
array(0) {
["2020 - 2010"]=> ...
}
要实现这一目标,请执行以下操作:
$archive_years[$date_title] = array(
'title' => get_field('jahr'),
'permalink' => get_the_permalink()
);
答案 2 :(得分:0)
这样你可以检查密钥是否存在并将其推送到数组:
if (!array_key_exists($date_title, $archive_years)) {
$archive_years[$date_title] = array();
}
array_push($archive_years[$date_title], $date_data);
答案 3 :(得分:-1)
你的逻辑中只是一个错误。请考虑以下代码的摘录:
$date_title => array(
'title' => get_field('jahr'),
'permalink' => get_the_permalink(),
)
);
if (!array_key_exists($date_title, $archive_years)) {
回想一下array_key_exists()
的{{3}}定义如下:
bool array_key_exists (mixed $key, array $search)
因此,您尝试用作“数组键”的是一个数组本身。你不能这样做。 (但是,PHP可能不会告诉你。它可能只是做错了。)
您将需要包含一个循环,用于搜索您的数组,深入比较每个元素与$date_title
,以确定它是否已存在。或者,您可能希望使用另一个数组,例如title
索引,以快速确定之前是否提及过某个特定标题。
进一步扩展上述概念,您可以通过title
和permalink
的连接索引“另一个数组”,以便快速检测到任何。
无论如何,必须修改程序的设计。由于这不是代码编写服务,我希望我的意见能够指出你的方向。