Порядок числовых массивов PHP

У меня есть массив и хочу создать новый числовой массив. Это выглядит так:

$created_old = explode("_", $result[$i]["created"]);
$created_new = array();
$created_new[0] = $created_old[2];
$created_new[1] = $created_old[0];
$created_new[2] = $created_old[1];
$created_new[3] = "";
$created_new[4] = rtrim(explode(":", $created_old[3])[2], ")");

//Get name from the database

$created_new[3] = $name;

$created = implode("_", $created_new);

Эта версия работает просто отлично, но предыдущая пропустила одну строку, поэтому код будет таким:

$created_old = explode("_", $result[$i]["created"]);
$created_new = array();
$created_new[0] = $created_old[2];
$created_new[1] = $created_old[0];
$created_new[2] = $created_old[1];
//$created_new[3] = ""; - I am missing
$created_new[4] = rtrim(explode(":", $created_old[3])[2], ")");

//Get name from the database

$created_new[3] = $name;

$created = implode("_", $created_new);

Во втором коде строка $created в неправильном порядке. Индекс 4 и 3 переключаются. Если бы это был ассоциативный массив, я бы это понял, но так как это числовой массив, я предполагаю, что индексы увеличиваются численно и упорядочиваются следующим образом. Поскольку у меня есть рабочая версия, мне не нужна помощь для исправления этого кода, а скорее понять, почему код ведет себя так, как он …

С наилучшими пожеланиями
JRsz

2

Решение

Все массивы PHP являются ассоциативными. В разговорной речи нет такого понятия, как «числовой массив». Ключ может быть либо строкой, либо числом, это не имеет значения. Ключи все еще упорядочены по их порядку вставки и никогда не упорядочены по их значению. Я бы не удивился такому поведению:

$arr['a'] = 1;
$arr['c'] = 3;
$arr['b'] = 2;
// ['a' => 1, 'c' => 3, 'b' => 2]

Точно такая же механика работает в вашем «числовом массиве».

Если вы хотите отсортировать ключи, вы должны сделать это явно, используя ksort.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]