Chỉ là một phụ gia.
Tôi biết điều này đã cũ , nhưng tôi muốn thêm một giải pháp mà tôi không thấy rằng tôi đã tự mình nghĩ ra. Tìm thấy câu hỏi này trong khi tìm kiếm một giải pháp khác và chỉ cần tìm, "Chà, trong khi tôi ở đây."
Trước hết, câu trả lời của Neal rất hay và tuyệt vời để sử dụng sau khi bạn chạy vòng lặp của mình, tuy nhiên, tôi thích làm tất cả công việc cùng một lúc. Tất nhiên, trong trường hợp cụ thể của tôi, tôi đã phải làm nhiều công việc hơn ví dụ đơn giản này ở đây, nhưng phương pháp vẫn được áp dụng. Tôi đã thấy nơi một vài người khác đề nghị foreach
các vòng lặp, tuy nhiên, điều này vẫn để lại cho bạn sau khi làm việc do bản chất của con thú. Thông thường tôi đề nghị những điều đơn giản hơn foreach
, tuy nhiên, trong trường hợp này, tốt nhất bạn nên nhớ for loop
logic lỗi thời . Đơn giản chỉ cần sử dụng i
! Để duy trì chỉ số thích hợp, chỉ cần trừ đi i
sau mỗi lần xóa một mục Array.
Đây là ví dụ đơn giản, hiệu quả của tô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--;
}
}
Sẽ xuất:
array(3) {
[0]=> int(3)
[1]=> int(4)
[2]=> int(5)
}
Điều này có thể có nhiều thực hiện đơn giản. Ví dụ, trường hợp chính xác của tôi yêu cầu giữ vật phẩm mới nhất trong mảng dựa trên các giá trị đa chiều. Tôi sẽ cho bạn thấy ý của tôi là:
$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);
}
}
}
}
Sẽ xuất:
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"
}
}
Như bạn thấy, tôi thao túng $ i trước mối nối khi tôi đang tìm cách loại bỏ mục trước đó, thay vì mục hiện tại.