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"
}
$arr = ['2010', '2020', '2030'];
$arr = array_merge(['Any'], $arr);
var_dump($arr);
请注意,后者仅在您的值确实是字符串时才有效,因为 array_merge()
在合并数字值时有其自身的怪异行为。
我正在用多年的页面发布日期填充一个数组。然后我让它只有独特的年份。然后我只需要插入一个字符串作为 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"
}
$arr = ['2010', '2020', '2030'];
$arr = array_merge(['Any'], $arr);
var_dump($arr);
请注意,后者仅在您的值确实是字符串时才有效,因为 array_merge()
在合并数字值时有其自身的怪异行为。