У меня есть массив и вы хотите создать новый числовой массив. Это выглядит так:
$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
.