>  기사  >  백엔드 개발  >  연관 배열을 삭제한 후 PHP가 재정렬됩니다.

연관 배열을 삭제한 후 PHP가 재정렬됩니다.

WBOY
WBOY원래의
2023-05-06 13:16:07587검색

PHP 배열 작업을 수행할 때 배열을 추가, 삭제, 수정해야 하는 경우가 많습니다. 배열 요소를 삭제하면 배열의 내부 순서가 변경될 수 있으며 foreach 루프를 사용하여 배열을 순회하는 경우 예기치 않은 결과가 발생할 수 있습니다. 이 기사에서는 연관 배열 요소를 삭제한 후 다시 정렬하여 요소 삭제로 인해 발생하는 순회 문제를 방지하는 방법을 소개합니다.

먼저 PHP의 배열 유형을 살펴보겠습니다.

PHP에는 인덱스 배열과 연관 배열이라는 두 가지 유형의 배열이 있습니다. 인덱스 배열은 0부터 시작하는 정수 인덱스 배열인 반면, 연관 배열은 문자열을 키로 사용합니다. 다음은 연관 배열의 예입니다.

$students = [
    'Tom' => 75,
    'Jerry' => 82,
    'Alice' => 95
];

이 배열에서 각 요소에는 문자열 키와 해당 값이 있습니다.

이제 연관 배열 $students에서 요소를 삭제하는 방법을 고려합니다. 이는 unset() 함수를 사용하여 달성할 수 있습니다: $students 中删除一个元素。使用 unset() 函数就可以实现:

unset($students['Jerry']);

这样就可以把 $students 数组中键为 'Jerry' 的元素删除了。

但是,这样删除元素之后,数组中的内部顺序就改变了,这可能会导致我们在遍历数组时出现问题。例如:

foreach ($students as $name => $score) {
    echo "$name's score is $score\n";
}

在执行这段代码之后,我们可能会得到这样的结果:

Tom's score is 75
Alice's score is 95

'Jerry' 的成绩并没有输出,因为它已经被删除了。这个问题的根本原因是,我们使用 foreach 循环遍历数组时,是按照数组的内部顺序进行的,而 unset() 函数删除元素之后,数组的内部顺序就改变了。

解决这个问题的方法很简单:只需要在删除元素之后,重新对数组进行排序,就可以避免因为数组的内部顺序问题导致的遍历问题了。在 PHP 中,我们可以使用 uasort() 函数来对关联数组按值进行排序。这个函数的用法如下:

uasort($array, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

uasort() 函数第一个参数是需要排序的数组,第二个参数是用于比较两个值的回调函数。在上面的代码中,我们使用了匿名函数来定义回调函数,通过比较 $a$b 的大小,返回相应的比较结果。

使用上面的代码对 $students

Alice's score is 95
Tom's score is 75

이 방법으로 $students 배열에서 'Jerry' 키가 있는 요소를 삭제할 수 있습니다.

그러나 이런 방식으로 요소를 삭제한 후에는 배열의 내부 순서가 변경되어 배열을 순회할 때 문제가 발생할 수 있습니다. 예:

$students = [
    'Tom' => 75,
    'Jerry' => 82,
    'Alice' => 95
];

unset($students['Jerry']);

uasort($students, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

foreach ($students as $name => $score) {
    echo "$name's score is $score\n";
}
이 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

rrreee

그리고 'Jerry'의 점수는 삭제되었기 때문에 출력되지 않습니다. 이 문제의 근본 원인은 foreach 루프를 사용하여 배열을 순회할 때 배열의 내부 순서대로 진행하고, unset() 함수가 요소를 삭제한 후에는 배열의 내부 순서가 변경된다는 것입니다. 🎜🎜이 문제에 대한 해결책은 매우 간단합니다. 배열의 내부 순서로 인해 발생하는 순회 문제를 피하기 위해 요소를 삭제한 후 배열을 다시 정렬하면 됩니다. PHP에서는 uasort() 함수를 사용하여 연관 배열을 값별로 정렬할 수 있습니다. 이 함수의 사용법은 다음과 같습니다. 🎜rrreee🎜uasort() 함수의 첫 번째 매개변수는 정렬이 필요한 배열이고, 두 번째 매개변수는 두 값을 비교하는 데 사용되는 콜백 함수입니다. 위 코드에서는 익명 함수를 사용하여 콜백 함수를 정의하고 $a$b의 크기를 비교하여 해당 비교 결과를 반환합니다. 🎜🎜위 코드를 사용하여 $students 배열을 정렬한 후 다음과 같은 결과를 얻을 수 있습니다. 🎜rrreee🎜이제 연관 배열 요소 삭제로 인해 발생하는 순회 문제를 성공적으로 피했습니다. 🎜🎜전체 샘플 코드는 다음과 같습니다. 🎜rrreee🎜이 기사에서는 요소 삭제로 인해 발생하는 순회 문제를 방지하기 위해 PHP에서 연관 배열 요소를 삭제한 후 다시 정렬하는 방법을 소개합니다. 연관 배열을 정렬하면 배열을 탐색할 때 올바른 결과를 얻을 수 있으므로 프로그래밍의 안정성과 신뢰성이 향상됩니다. 🎜

위 내용은 연관 배열을 삭제한 후 PHP가 재정렬됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.