Просто добавка.
Я знаю, что это старый , но я хотел добавить решение, я не вижу, что я придумал сам.Нашел этот вопрос, когда искал другое решение, и просто подумал: «Ну, пока я здесь».
Прежде всего, ответ Neal хорош и хорош в использованииоднако после того, как вы запустите свой цикл, я бы предпочел выполнить всю работу одновременно.Конечно, в моем конкретном случае мне пришлось проделать больше работы, чем этот простой пример, но метод все еще применяется.Я видел, где пара других предложила foreach
петли, однако это все равно оставляет вам после работы из-за природы зверя.Обычно я предлагаю более простые вещи, такие как foreach
, однако в этом случае лучше всего помнить старую добрую логику for loop
.Просто используйте i
!Чтобы поддерживать соответствующий индекс, просто вычитайте из i
после каждого удаления элемента массива.
Вот мой простой рабочий пример:
$array = array(1,2,3,4,5);
for ($i = 0; $i < count($array); $i++) {
if($array[$i] == 1 || $array[$i] == 2) {
array_splice($array, $i, 1);
$i--;
}
}
Будет выводить:
array(3) {
[0]=> int(3)
[1]=> int(4)
[2]=> int(5)
}
Это может иметь много простых реализаций.Например, мой точный случай требовал хранения самого последнего элемента в массиве на основе многомерных значений.Я покажу вам, что я имею в виду:
$files = array(
array(
'name' => 'example.zip',
'size' => '100000000',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
),
array(
'name' => 'example.zip',
'size' => '10726556',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
),
array(
'name' => 'example.zip',
'size' => '110726556',
'type' => 'application/x-zip-compressed',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
),
array(
'name' => 'example2.zip',
'size' => '12356556',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example2.zip',
'deleteUrl' => 'server/php/?file=example2.zip',
'deleteType' => 'DELETE'
)
);
for ($i = 0; $i < count($files); $i++) {
if ($i > 0) {
if (is_array($files[$i-1])) {
if (!key_exists('name', array_diff($files[$i], $files[$i-1]))) {
if (!key_exists('url', $files[$i]) && key_exists('url', $files[$i-1])) $files[$i]['url'] = $files[$i-1]['url'];
$i--;
array_splice($files, $i, 1);
}
}
}
}
Будет выводить:
array(1) {
[0]=> array(6) {
["name"]=> string(11) "example.zip"
["size"]=> string(9) "110726556"
["type"]=> string(28) "application/x-zip-compressed"
["deleteUrl"]=> string(28) "server/php/?file=example.zip"
["deleteType"]=> string(6) "DELETE"
["url"]=> string(44) "28188b90db990f5c5f75eb960a643b96/example.zip"
}
[1]=> array(6) {
["name"]=> string(11) "example2.zip"
["size"]=> string(9) "12356556"
["type"]=> string(28) "application/x-zip-compressed"
["deleteUrl"]=> string(28) "server/php/?file=example2.zip"
["deleteType"]=> string(6) "DELETE"
["url"]=> string(45) "28188b90db990f5c5f75eb960a643b96/example2.zip"
}
}
Как вы видите, я манипулирую $ i перед соединением, пытаясь удалить предыдущий, а не настоящий товар.