#php #arrays
#php #массивы
Вопрос:
У меня есть приведенный ниже массив, я хочу пропустить первые 3 элемента из массива (ключ — 0, 1, 2) и удалить следующие 2 элемента (ключ — 3, 4). т. Е. Я хочу, чтобы массив был таким, он пропускал каждый 1-й элемент 3 и удалял следующие 2 элемента после первых 3. Я пробовал приведенный ниже код, но это неподходящее решение для этого.
for($i = 0; $i < count($newArray); $i = 1) {
if($i == 3 || $i == 4 || $i == 8 || $i == 9){
unset($newArray[$i]);
}
}
Входной массив
Array
(
[0] => 0.393
[1] => 0.769
[2] => 0.189
[3] => 0
[4] => 0
[5] => 0.349
[6] => 0.686
[7] => 0.168
[8] => 0
[9] => 0
[10] => 0.272
[11] => 0.534
[12] => 0.131
[13] => 1
[14] => 0
)
**Expected Output**
Array
(
[0] => 0.393
[1] => 0.769
[2] => 0.189
[3] => 0.349
[4] => 0.686
[5] => 0.168
[6] => 0.272
[7] => 0.534
[8] => 0.131
)
Комментарии:
1. вы хотите удалить только
integers
и сохранитьfloat
значения?2. Нет, я хочу удалить пропустить 1-й элемент 3 из, а затем отменить следующие 2, снова пропустить 3 и отменить следующие 2 вот так
Ответ №1:
Вы можете использовать array_filter
, используя ARRAY_FILTER_USE_KEY
флаг для передачи ключей элементов в функцию фильтра и удаления всех записей, key % 5
не < 3
:
$newArray = array_filter($newArray, function ($k) { return $k % 5 < 3; }, ARRAY_FILTER_USE_KEY );
print_r($newArray);
Вывод:
Array
(
[0] => 0.393
[1] => 0.769
[2] => 0.189
[5] => 0.349
[6] => 0.686
[7] => 0.168
[10] => 0.272
[11] => 0.534
[12] => 0.131
)
Обратите внимание, что если вы хотите, чтобы значения массива были проиндексированы с 0, вы можете передать результат через array_values
:
$newArray = array_values($newArray);
print_r($newArray);
Вывод:
Array
(
[0] => 0.393
[1] => 0.769
[2] => 0.189
[3] => 0.349
[4] => 0.686
[5] => 0.168
[6] => 0.272
[7] => 0.534
[8] => 0.131
)
Комментарии:
1. У меня это работает. Можем ли мы сделать это без фильтра массива? Также можете ли вы объяснить решение, которое вы дали, чтобы оно было полезным.
2. @user8989878 array_filter возвращает элементы массива, для которых функция возвращает true . Передавая ключ массива функции и принимая его по модулю 5, первые 3 ключа равны 0-2, следующие два 3-4, следующие три снова 0-2, следующие два 3-4 и т.д. и т.п. Поэтому, если мы вернем true, когда значение ключа равно 0, 1 или 2, мы вернем значения по вашему желанию.
3. Вы могли бы создать решение, используя простой цикл foreach, например 3v4l.org/i3IIr