php 添加数组使结果为空

php adding arrays makes result empty

我正在用多年的页面发布日期填充一个数组。然后我让它只有独特的年份。然后我只需要插入一个字符串作为 select 框的第一个元素。结果数组应如下所示:例如 ['Any', '2010', '2018', '2019', '2020']。在我插入 'Any' 之前,我有年份列表。但是当我添加 'Any' 时,它会以某种方式删除所有年份并只留下这个词。想不通为什么。

代码如下:

$years = array();
$post_list = Post::getPostList();
if (!empty($post_list)) {
    foreach ($post_list as $post){
        $years[] = $dh->formatDate($post->getTimestamp(), '~yyyy', 'system');
    }
    $years = array_unique($years, SORT_NUMERIC);
}                                 // all good up to here
$years = [t('Any')] + $years;     // and this removes the years
return $years;

尝试使用array_unshift:

array_unshift($years, t('Any')); 

注意通过引用传递的数组,因此您不需要重新分配变量。

如 PHP 文档中的 this user comment 所述,联合运算符基于键而非值创建联合。

因此,如果您这样做:

$arr = ['2010', '2020', '2030'];
$years = ['Any'] + $arr;
var_dump($years);

// output
array(3) {
  [0]=>
  string(3) "Any"
  [1]=>
  string(4) "2020"
  [2]=>
  string(4) "2030"
}

$arr 中值的键是 0、1、2 - $years 中唯一的键是 0。这导致键被覆盖。

但是您可以使用 array_unshift:

$arr = ['2010', '2020', '2030'];
array_unshift($arr, 'Any');
var_dump($arr);

// output
array(4) {
  [0]=>
  string(3) "Any"
  [1]=>
  string(4) "2010"
  [2]=>
  string(4) "2020"
  [3]=>
  string(4) "2030"
}

array_merge:

$arr = ['2010', '2020', '2030'];
$arr = array_merge(['Any'], $arr);
var_dump($arr);

请注意,后者仅在您的值确实是字符串时才有效,因为 array_merge() 在合并数字值时有其自身的怪异行为。