php добавление массивов делает результат пустым - PullRequest
1 голос
/ 22 февраля 2020

Я заполняю массив годами публикации страниц sh дат. Тогда я делаю это только по уникальным годам. Тогда мне просто нужно вставить строку в качестве первого элемента для поля выбора. Результирующий массив должен выглядеть следующим образом: ['Any', '2010', '2018', '2019', '2020'], например. Прежде чем вставить «Любой», у меня есть список лет. Но когда я добавляю «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;

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Как указано в этом комментарии пользователя в PHP документах, оператор объединения создает объединение на основе ключей, а не на основе значений.

Поэтому, если вы сделаете что-то подобное :

$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() имеет свое странное поведение при объединении числовых значений.

1 голос
/ 22 февраля 2020

Попробуйте использовать array_unshift :

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

Обратите внимание на массив, переданный по ссылке, поэтому вам не нужно переназначать переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...