У меня есть массив и хочу создать новый числовой массив. Это выглядит так:
$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
Все массивы PHP являются ассоциативными. В разговорной речи нет такого понятия, как «числовой массив». Ключ может быть либо строкой, либо числом, это не имеет значения. Ключи все еще упорядочены по их порядку вставки и никогда не упорядочены по их значению. Я бы не удивился такому поведению:
$arr['a'] = 1;
$arr['c'] = 3;
$arr['b'] = 2;
// ['a' => 1, 'c' => 3, 'b' => 2]
Точно такая же механика работает в вашем «числовом массиве».
Если вы хотите отсортировать ключи, вы должны сделать это явно, используя ksort
.
Других решений пока нет …