그냥 첨가제.
나는 이것이 오래 되었다는 것을 알고 있지만, 나 자신을 생각해 낸 솔루션을 추가하고 싶었다. 다른 해결책을 찾는 동안이 질문을 발견하고 방금 "내가 여기있는 동안"이라고 생각했습니다.
우선, 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를 조작합니다.