어레이 요소를 삭제하고 어레이를 재인덱스화하는 방법
배열에 문제가 있습니다.아래와 같이 수정하고 싶은 어레이가 1개 있습니다.인덱스로 요소(요소)를 제거한 후 배열을 다시 인덱싱합니다.가능합니까?
$foo = array(
'whatever', // [0]
'foo', // [1]
'bar' // [2]
);
$foo2 = array(
'foo', // [0], before [1]
'bar' // [1], before [2]
);
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
array_splice($array, 0, 1);
http://php.net/manual/en/function.array-splice.php
를 사용하는 것이 좋습니다.그러면 어레이의 첫 번째 요소가 반환되고 어레이에서 해당 요소를 제거한 후 어레이를 다시 인덱싱합니다.이 모든 것을 하나의 효율적인 방법으로.
array_splice($array, array_search(array_value, $array), 1);
Unset($array[0]);
Sort($array);
왜 이것이 낮게 평가되고 있는지는 모르겠지만, 누군가 시도하려고 한다면 효과가 있다는 것을 알게 될 것이다.어레이에서 정렬을 사용하면 어레이의 키가 재할당됩니다.유일한 단점은 값이 정렬된다는 것입니다.열쇠는 분명히 재할당될 것이기 때문에array_values
값이 정렬되어 있는지 여부는 중요하지 않습니다.
PHP 7.4의 2020 벤치마크
현재 답변에 만족하지 못하는 사용자를 위해 벤치마크 스크립트를 작성했습니다.CLI에서 누구나 실행할 수 있습니다.
다음 두 가지 솔루션을 비교합니다.
unset()에 array_values() VS array_splice()를 지정합니다.
<?php
echo 'php v' . phpversion() . "\n";
$itemsOne = [];
$itemsTwo = [];
// populate items array with 100k random strings
for ($i = 0; $i < 100000; $i++) {
$itemsOne[] = $itemsTwo[] = sha1(uniqid(true));
}
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
unset($itemsOne[$i]);
$itemsOne = array_values($itemsOne);
}
$end = microtime(true);
echo 'unset & array_values: ' . ($end - $start) . 's' . "\n";
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
array_splice($itemsTwo, $i, 1);
}
$end = microtime(true);
echo 'array_splice: ' . ($end - $start) . 's' . "\n";
보시는 바와 같이 아이디어는 간단합니다.
- 동일한 10만 개의 항목을 사용하여 2개의 어레이를 만듭니다(임의로 생성된 문자열).
- unset() 및 array_values()를 사용하여 첫 번째 어레이에서 10,000개의 첫 번째 항목을 제거하고 다시 인덱싱합니다.
- array_splice()를 사용하여 두 번째 어레이에서 10,000개의 첫 번째 항목을 제거합니다.
- 두 방법 모두 시간 측정
Dell Latitude i7-6600U 2.60GHz x 4 및 15에서의 상기 스크립트 출력.5 GiB RAM:
php v7.4.8
unset & array_values: 29.089932918549s
array_splice: 17.94264793396s
평가: array_splice는 unset 및 array_values보다 성능이 거의 2배 향상되었습니다.
array_splice가 우승자입니다!
사용 방법:
$foo2 = array_slice($foo, 1);
잠시 후 모든 어레이 요소(불필요한 요소 제외)를 새 어레이에 복사합니다.
언급URL : https://stackoverflow.com/questions/5217721/how-to-remove-array-element-and-then-re-index-array
'programing' 카테고리의 다른 글
그렇지 않으면 html에 내장되어 있는 경우 (0) | 2022.09.16 |
---|---|
Android.view를 참조.Class Android를 부풀리는 동안 BulgeException 오류가 발생했습니다.Webkit.WebView (0) | 2022.09.16 |
이미지를 데이터베이스에 직접 저장하시겠습니까, 아니면 Base64 데이터로 저장하시겠습니까? (0) | 2022.09.16 |
판독 가능한/계층 형식으로 배열 표시 (0) | 2022.09.16 |
Mysql 성능 불량 (0) | 2022.09.16 |