현재 위치: > 최신 기사 목록> Array_Slice와 Array_Filter 사이에서 먼저 사용해야합니까? 결과에 대한 순서의 영향은 무엇입니까?

Array_Slice와 Array_Filter 사이에서 먼저 사용해야합니까? 결과에 대한 순서의 영향은 무엇입니까?

gitbox 2025-05-20

php에서 array_slice ()array_filter () 는 일반적으로 사용되는 배열 처리 기능입니다. 하나는 배열의 일부를 가로 채고 다른 하나는 기준과 일치하는 배열의 요소를 필터링하는 데 사용됩니다. 데이터를 처리 할 때는 종종이 두 기능을 함께 사용해야합니다. 그러나 당신은 그것에 대해 생각 했습니까?

대답은 : 예, 순서는 결과에 영향을 미치며 일부 시나리오에서는 그 영향이 매우 큽니다.

기능 소개에 대한 간단한 검토

  • Array_Filter (Array $ array, Callable | NULL $ CALLBACK = NULL) : 배열
    콜백 함수로 필터링 된 배열을 반환합니다. 콜백 함수가 전달되지 않으면 PHP는 False 값 ( 0 , ' , NULL , FALSE 등)의 값으로 모든 요소를 ​​자동으로 제거합니다.

  • Array_Slice (array $ array, int $ offset,? int $ longth = null, bool $ preserve_keys = false) : 배열
    배열에서 하위 배열 배열을 반환합니다. 네거티브 오프셋을 지원하고 원래 키를 유지할지 여부를 선택할 수 있습니다.

예제 분석

다음 배열이 있다고 가정합니다.

 $data = [0, 1, 2, 3, 4, 5];

다음을 수행해야합니다.

  1. 값이 2보다 큰 요소를 필터링하고;

  2. 필터링 된 결과에서 처음 두 요소를 사용하십시오.

Array_FilterArray_Slice

 $filtered = array_filter($data, function($item) {
    return $item > 2;
});
$result = array_slice($filtered, 0, 2);
print_r($result);

산출:

 Array
(
    [3] => 3
    [4] => 4
)

여기서 출력은 원래 배열에서 2 (즉, 3, 4, 5)보다 큰 요소를 필터링 한 다음 처음 두 개를 가져 오는 것입니다. preserve_keys를 true 로 설정하지 않으면 array_slice가 다시 표시되고 ( 거짓 으로 설정하는 기본 동작) 출력이됩니다.

 $result = array_slice(array_values($filtered), 0, 2);

산출:

 Array
(
    [0] => 3
    [1] => 4
)

Array_Slice 먼저 및 Array_Filter

 $sliced = array_slice($data, 0, 4);
$result = array_filter($sliced, function($item) {
    return $item > 2;
});
print_r($result);

산출:

 Array
(
    [3] => 3
)

여기서 우리는 처음 4 가지 요소 (0, 1, 2, 3)를 가져간 다음 2보다 큰 항목을 걸러 내며 하나의 결과 만 있습니다 : 3 .

어떤 주문이 ​​더 적절합니까?

  • 기준을 충족하는 모든 요소에서 처음 몇 가지 결과를 얻으려면 Array_Filter 먼저, Array_Slice .

  • 원래 배열의 처음 몇 개 항목의 기준을 충족하는 항목을 필터링하려면 Array_Slice 먼저 Array_Filter를 사용하십시오.

이는 페이징, 데이터 흐름 최적화 및 대형 데이터 세트를 처리 할 때 특히 중요합니다.

실제 시나리오에서 응용 프로그램의 예

API 인터페이스 https://gitbox.net/api/posts 가 있다고 가정합니다. 제목에서 키워드 "PHP"로 상위 5 개 게시물을 필터링하려고합니다.

 $response = file_get_contents('https://gitbox.net/api/posts');
$posts = json_decode($response, true);

$filtered = array_filter($posts, function($post) {
    return strpos($post['title'], 'PHP') !== false;
});

$topFive = array_slice(array_values($filtered), 0, 5);

print_r($topFive);

이를 작성하면 실제로 "PHP를 포함하는 모든 게시물 중 상위 5 개"를 얻을 수 있습니다.

반대로, 처음 10 개의 게시물에서 "PHP"가 포함 된 것을 필터링하려면 반환하십시오.

 $topTen = array_slice($posts, 0, 10);
$filtered = array_filter($topTen, function($post) {
    return strpos($post['title'], 'PHP') !== false;
});

print_r($filtered);

요약

  • 순서가 다른 결과는 매우 다를 수 있습니다.

  • 먼저 필터링 한 다음 "모든 데이터의 선호되는 부분"에 적용 할 수있는 인터셉트;

  • 먼저 인터셉트 한 다음 필터는 "필터링 전에 데이터의 이전 부분을 제한"하는 데 적합합니다.

Array_SliceArray_Filter 의 조합을 사용하는 경우 순서를 결정하고 논리적 오류 또는 예기치 않은 결과를 피하기 위해 대상 데이터의 범위를 명확히해야합니다.