У меня есть индексированный массив, который содержит несколько ассоциативных массивов, и я применяю простой
$my_arr = array_filter($my_arr, function($obj) {
return $obj["value"] < 100;
});
функция для фильтрации некоторых элементов в массиве.
Это начало делать мою угловую ошибку в Angular странным образом, поэтому через несколько минут я обнаружил, что $my_arr
был преобразован из индексированного массива в ассоциативный массив.
array_filter
?array_filter
что я хочу индексированный массив?РЕДАКТИРОВАТЬ: Как и просили в комментариях, мой $my_arr
:
$my_arr = [
["foo" => "bar", "value" => 10],
["foo" => "var", "value" => 30],
["foo" => "car", "value" => 440],
["foo" => "dar", "value" => 700]
]
РЕДАКТИРОВАТЬ: Реальная выдержка из моего кода:
$media = [
"photos" => [
["foo" => "bar", "value" => 10],
["foo" => "var", "value" => 20],
["foo" => "car", "value" => 50],
]
];
echo json_encode($media);
echo "\n\n";
$media["photos"] = array_filter($media["photos"], function($photo) {
return $photo["value"] > 15;
});
echo json_encode($media);
Выход:
{"photos":[{"foo":"bar","value":10},{"foo":"var","value":20},{"foo":"car","value":50}]}
{"photos":{"1":{"foo":"var","value":20},"2":{"foo":"car","value":50}}}
Ожидаемый результат:
{"photos":[{"foo":"bar","value":10},{"foo":"var","value":20},{"foo":"car","value":50}]}
{"photos":[{"foo":"var","value":20},{"foo":"car","value":50}]}
Массив не конвертируется из одного типа в другой — это то же самое в PHP. Это просто array_filter()
сохраняет ассоциации ключ / значение при фильтрации. Нет способа автоматически переиндексировать массив согласно документации, поэтому вы должны сделать это вручную:
$my_arr = array_values(array_filter($my_arr, function($obj) {
return $obj["value"] < 100;
}));
Других решений пока нет …