programing

array_filter() 뒤에 키를 리셋하여 0부터 순서대로 이동하려면 어떻게 해야 합니까?

copyandpastes 2022. 9. 25. 22:37
반응형

array_filter() 뒤에 키를 리셋하여 0부터 순서대로 이동하려면 어떻게 해야 합니까?

array_filter를 사용하여 값 "만 있는 엔트리를 배열에서 삭제했습니다.이제 플레이스 홀더에 따라 0부터 시작하는 특정 변환을 적용하려고 합니다만, 안타깝게도 원래 인덱스는 그대로 유지됩니다.한동안 찾아봤지만 아무것도 안 보였어요, 어쩌면 당연한 걸 놓쳤는지도 모르지만, 제 질문은...

어레이 인덱스를 오래된 인덱스를 유지하는 대신 어레이 인덱스를 쉽게 리셋하여 0부터 시작하여 NEW 어레이로 순서대로 이동하려면 어떻게 해야 합니까?

어레이를 호출하면 0부터 다시 인덱싱됩니다.

어레이 필터를 사용하고 있는 경우는, 다음과 같이 실시합니다.

$NewArray = array_values(array_filter($OldArray));

사용하다array_values():

<?php

$array = array('foo', 'bar', 'baz');
$array = array_filter($array, function ($var) {
    return $var !== 'bar';
});

print_r($array); // indexes 0 and 2
print_r(array_values($array)); // indexes 0 and 1

얼마나 많은 프로그래머가 순수하게 메서드를 코드에 복사/붙여넣고 있는지 걱정입니다.array_filter의 탐욕으로 인해 자신도 모르게 문제가 발생한 프로그래머가 몇 명인지 궁금하네요.함수가 배열에서 너무 많은 값을 지운다는 사실을 깨닫지 못한 사람이 얼마나 될까?

두 부분으로 나뉜 박리 프로세스에 대해 더 나은 대안을 제시하겠습니다.NULL요소를 배열에서 추출하고 키를 다시 추출합니다.

하지만, 우선, 나는 욕심 많은 본성을 강조하는 것이 매우 중요하다.array_filter()그리고 이것이 얼마나 묵묵히 당신의 프로젝트를 망칠 수 있는지.다음으로 문제가 발생할 가능성이 있는 값이 혼재된 어레이를 나타냅니다.

$array=['foo',NULL,'bar',0,false,null,'0',''];

null 값은 대문자와 소문자에 관계없이 제거됩니다.

그러나 array_values() & array_filter()를 사용하면 어레이에 남아 있는 것을 확인합니다.

array_values(array_filter($array));

출력 어레이($array):

array (
  0 => 'foo',
  1 => 'bar'
)
// All empty, zero-ish, falsey values were removed too!!!

여기서 array_walk() & is_null()을 사용하여 새로운 필터링된 배열을 생성하는 방법을 보여 줍니다.

array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});

이것은 읽기/설명하기 쉽도록 여러 줄에 걸쳐 쓸 수 있습니다.

array_walk(                      // iterate each element of an input array
    $array,                      // this is the input array
    function($v)use(&$filtered){ // $v is each value, $filter (output) is declared/modifiable
        if(!is_null($v)){        // this literally checks for null values
            $filtered[]=$v;      // value is pushed into output with new indexes
        }
    }
);

출력 배열($filter):

array (
  0 => 'foo',
  1 => 'bar',
  2 => 0,
  3 => false,
  4 => '0',
  5 => '',
)

내 방법을 사용하면 다시 인덱싱된 키, null이 아닌 모든 값을 얻을 수 있지만 null이 아닌 값은 얻을 수 없습니다.깔끔하고 휴대성이 뛰어나며 신뢰성이 뛰어난 원라이너.어레이의 늘필터링 요구에 모두 대응합니다.여기 시범이 있습니다.



마찬가지로 빈 요소, false 요소 및 늘 요소(0이 유지됨)를 삭제하는 경우 다음 4가지 방법이 작동합니다.

var_export(array_values(array_diff($array,[''])));

또는

var_export(array_values(array_diff($array,[null])));

또는

var_export(array_values(array_diff($array,[false])));

또는

var_export(array_values(array_filter($array,'strlen')));

출력:

array (
  0 => 'foo',
  1 => 'bar',
  2 => 0,
  3 => '0',
)

마지막으로 언어구조의 구문을 선호하는 사용자는 한정값을 새 배열에 푸시하여 새 인덱스를 발행할 수도 있습니다.

$array=['foo', NULL, 'bar', 0, false, null, '0', ''];

$result = [];
foreach ($array as $value) {
    if (strlen($value)) {
        $result[] = $value;
    }
}

var_export($result);

언급URL : https://stackoverflow.com/questions/3401850/after-array-filter-how-can-i-reset-the-keys-to-go-in-numerical-order-starting

반응형