php教程 php手册 php 数组过滤函数 array_filter与array_unique

php 数组过滤函数 array_filter与array_unique

May 25, 2016 pm 04:53 PM
explode foreach

在php中我给大家介绍两个比较常用的数组过滤函数array_filter与array_unique了,一个是过滤数组空值,一个是过滤数组重复值,我们现在一起来看看。

语法

array_filter(array,function)

参数     描述

array     必需。规定输入的数组。

function     自定义函数的名称,为空时过滤掉所有值为flase的元素

<?php
function odd($var) {
    return ($var & 1);
}
function even($var) {
    return (!($var & 1));
}
$array1 = array(
    "a" => 1,
    "b" => 2,
    "c" => 3,
    "d" => 4,
    "e" => 5
);
$array2 = array(
    6,
    7,
    8,
    9,
    10,
    11,
    12
);
echo "Odd :n";
print_r(array_filter($array1, "odd"));
echo "Even:n";
print_r(array_filter($array2, "even"));
/*
  
Odd : 
Array 
( 
    
[a] => 1 
    
[c] => 3 
    
[e] => 5 
) 
Even: 
Array 
( 
    
[0] => 6 
    
[2] => 8 
    
[4] => 10 
    
[6] => 12 
) 
*/
?>
로그인 후 복사

过滤掉PHP数组中的重复值

去除一个数组中的重复值,可以使用foreach方法,也可以使用array_unique方法,下面的代码两种方法都使用了

<?php
$arrF = array();
$arrS = array();
$intTotal = 100;
$intRand = 10;
for ($i = 0; $i < $intTotal; $i++) {
    $arrF[] = rand(1, $intRand);
    $arrS[] = rand(1, $intRand);
}
$arrT = array_merge($arrF, $arrS);
$arrRF = array();
$intStart = time();
foreach ($arrT as $v) {
    if (in_array($v, $arrRF)) {
        continue;
    } else {
        $arrRF[] = $v;
    }
}
$intEnd = time();
$intTime = $intEnd - $intStart;
echo "With Continue,Spend time:$intTime<br/>";
$intStart1 = time();
$arrRS = array_unique($arrT);
$intEnd2 = time();
$intTime2 = $intEnd2 - $intStart1;
echo "With array_unique function,Spend time:($intTime2)";
echo "<pre class="brush:php;toolbar:false">";
print_r($arrT);
print_r($arrRF);
print_r($arrRS);
echo "
로그인 후 복사
"; ?>

在$intTotal比较小的情况下,比如说1000以内,$intRand的取值基本不影响结果,两者执行的时间都差不多。

测试$intTotal 大于10000时,$intRand取值100时,使用array_unique的效率要高于foreach循环判断,$intRand=10,两者执行时间一致。

因此,可以得出结论,当数组容量不大,大概在1000以内时,使用两者的执行效率差不多。

当数组容量比较大时(具体应该到什么值,我没有详细测试,感兴趣的可以确定一下这个值),随着$intRand的逐渐增大,array_unique的表现更好,我不使用$intTotal/$intRand这个比值,是因为,感觉并不是成比例变化,但是基本会遵循比值越大,array_unique表现越好。

综上所述,在过滤数组重复值的时候,建议使用array_unuique,数组不大的时候两者效率等同,而array_unique使用当然让你的代码一下子减了好几行,数组容量过大时,函数的表现更好


二维数组去重复项函数

PHP数组去除重复项 有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组 的 array_unique函数

<?php
function unique_arr($array2D, $stkeep = false, $ndformat = true) {
    // 判断是否保留一级数组键 (一级数组键可以为非数字)
    if ($stkeep) $stArr = array_keys($array2D);
    // 判断是否保留二级数组键 (所有二级数组键必须相同)
    if ($ndformat) $ndArr = array_keys(end($array2D));
    //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
    foreach ($array2D as $v) {
        $v = join(",", $v);
        $temp[] = $v;
    }
    //去掉重复的字符串,也就是重复的一维数组
    $temp = array_unique($temp);
    //再将拆开的数组重新组装
    foreach ($temp as $k => $v) {
        if ($stkeep) $k = $stArr[$k];
        if ($ndformat) {
            $tempArr = explode(",", $v);
            foreach ($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
        } else $output[$k] = explode(",", $v);
    }
    return $output;
}
?>
로그인 후 복사

测试

$array2D = array(&#39;first&#39;=>array(&#39;title&#39;=>&#39;1111&#39;,&#39;date&#39;=>&#39;2222&#39;),&#39;second&#39;=>array(&#39;title&#39;=>&#39;1111&#39;,&#39;date&#39;=>&#39;2222&#39;),&#39;third&#39;=>array(&#39;title&#39;=>&#39;2222&#39;,&#39;date&#39;=>&#39;3333&#39;));
print_r($array2D);
print_r(unique_arr($array2D,true));
로그인 후 복사


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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java ArrayList를 순회할 때 요소를 삭제하기 위해 foreach와 iterator를 사용하는 것의 차이점은 무엇입니까? Java ArrayList를 순회할 때 요소를 삭제하기 위해 foreach와 iterator를 사용하는 것의 차이점은 무엇입니까? Apr 27, 2023 pm 03:40 PM

1. Iterator와 foreach의 차이점은 다형성 차이입니다(foreach의 맨 아래 레이어는 Iterator입니다). Iterator는 인터페이스 유형이므로 컬렉션 유형이나 배열에 관심이 없습니다. for와 foreach 모두 컬렉션 유형을 알아야 합니다. 1. foreach의 최하위 레이어가 Iterator에 의해 작성된 코드라고 말하는 이유: 디컴파일된 코드: 2. foreach와 iterator에서 제거의 차이점을 살펴보세요. Alibaba Java Development Manual, 그러나 1번의 경우에는 오류가 보고되지 않으며, 2번의 경우(java.util.ConcurrentModificationException) 먼저 오류가 보고됩니다.

PHP에서 foreach 루프 수를 결정하는 방법 PHP에서 foreach 루프 수를 결정하는 방법 Jul 10, 2023 pm 02:18 PM

​PHP가 foreach 루프 수를 결정하는 단계: 1. "$fruits" 배열을 만듭니다. 2. 초기 값이 0인 카운터 변수 "$counter"를 만듭니다. 3. "foreach"를 사용하여 루프를 만듭니다. 배열을 통해 루프 본문의 카운터 변수 값을 늘린 다음 각 요소와 해당 인덱스를 출력합니다. 4. "foreach" 루프 외부에 카운터 변수 값을 출력하여 루프가 도달하는 요소를 확인합니다.

PHP는 키가 뒤집힌 배열을 반환합니다. PHP는 키가 뒤집힌 배열을 반환합니다. Mar 21, 2024 pm 02:10 PM

이 기사에서는 키 값을 뒤집은 후 PHP가 배열을 반환하는 방법을 자세히 설명합니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 기사를 읽고 뭔가를 얻을 수 있기를 바랍니다. PHP 키 값 뒤집기 배열 키 값 뒤집기는 배열의 키와 값을 교환하여 원래 키를 값으로, 원래 값을 키로 사용하여 새 배열을 생성하는 배열 작업입니다. 구현 방법 PHP에서는 다음 방법을 통해 배열의 키-값 뒤집기를 수행할 수 있습니다. array_flip() 함수: array_flip() 함수는 키-값 뒤집기 작업에 특별히 사용됩니다. 배열을 인수로 받고 키와 값이 교환된 새 배열을 반환합니다. $original_array=[

PHP 폭발 기능을 사용하고 오류를 해결하는 방법 PHP 폭발 기능을 사용하고 오류를 해결하는 방법 Mar 10, 2024 am 09:18 AM

PHP의 폭발 함수는 문자열을 배열로 분할하는 데 사용되는 함수입니다. 매우 일반적이고 유연합니다. 분해 기능을 사용하는 과정에서 몇 가지 오류와 문제가 자주 발생합니다. 이 기사에서는 분해 기능의 기본 사용법을 소개하고 오류 보고서를 해결하는 몇 가지 방법을 제공합니다. 1. 분해 함수의 기본 사용법 PHP에서 분해 함수의 기본 구문은 다음과 같습니다.

PHP에서 폭발 기능을 사용할 때 발생하는 일반적인 오류 및 해결 방법 PHP에서 폭발 기능을 사용할 때 발생하는 일반적인 오류 및 해결 방법 Mar 11, 2024 am 08:33 AM

제목: PHP에서 분해 함수를 사용할 때 발생하는 일반적인 오류 및 해결 방법 PHP에서 분해 함수는 문자열을 배열로 분할하는 데 사용되는 일반적인 함수입니다. 그러나 부적절한 사용이나 잘못된 데이터 형식으로 인해 일부 일반적인 오류가 발생할 수 있습니다. 이 문서에서는 분해 기능을 사용할 때 발생할 수 있는 문제를 분석하고 해결 방법과 구체적인 코드 예제를 제공합니다. 실수 1: 구분자 매개변수가 전달되지 않습니다. 분해 기능을 사용할 때 가장 일반적인 실수 중 하나는 구분자 매개변수가 전달되지 않는다는 것입니다.

분해 및 내포 함수를 사용하여 문자열 분할 및 병합 분해 및 내포 함수를 사용하여 문자열 분할 및 병합 Jun 15, 2023 pm 08:42 PM

PHP 프로그래밍에서 문자열 처리는 자주 필요한 작업입니다. 그중 문자열 분할 및 병합은 두 가지 일반적인 요구 사항입니다. 이러한 작업을 보다 편리하게 수행하기 위해 PHP는 두 가지 매우 실용적인 기능, 즉 분해 및 내파 기능을 제공합니다. 이 기사에서는 이 두 가지 기능의 사용법과 몇 가지 실용적인 기술을 소개합니다. 1. 분해 함수 분해 함수는 지정된 구분 기호에 따라 문자열을 분할하고 배열을 반환하는 데 사용됩니다. 함수 프로토타입은 다음과 같습니다: arra

PHP는 배열의 현재 요소를 반환합니다. PHP는 배열의 현재 요소를 반환합니다. Mar 21, 2024 pm 12:36 PM

이 기사에서는 PHP가 반환하는 배열의 현재 요소에 대해 자세히 설명할 것입니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 기사를 읽고 뭔가를 얻을 수 있기를 바랍니다. PHP 배열의 현재 요소 가져오기 PHP는 배열의 현재 요소 가져오기를 포함하여 배열에 액세스하고 조작하기 위한 다양한 방법을 제공합니다. 다음은 일반적으로 사용되는 몇 가지 기술을 소개합니다. 1. current() 함수 current() 함수는 배열의 내부 포인터가 현재 가리키는 요소를 반환합니다. 포인터는 처음에 배열의 첫 번째 요소를 가리킵니다. 다음 구문을 사용하십시오. $currentElement=current($array);2.key() 함수 key() 함수는 현재 요소를 가리키는 배열 내부 포인터를 반환합니다.

foreach와 for 루프의 차이점은 무엇입니까 foreach와 for 루프의 차이점은 무엇입니까 Jan 05, 2023 pm 04:26 PM

차이점: 1. for는 인덱스를 통해 각 데이터 요소를 반복하는 반면 forEach는 JS 기본 프로그램을 통해 배열의 데이터 요소를 반복합니다. 2. for는 break 키워드를 통해 루프 실행을 종료할 수 있지만 forEach는 그렇지 않습니다. for는 루프 변수의 값을 제어하여 루프 실행을 제어할 수 있지만 forEach는 루프 외부에서 루프 변수를 호출할 수 없지만 forEach는 루프 외부에서 루프 변수를 호출할 수 없습니다. forEach보다 높습니다.

See all articles