PHP array_search()函数的用法

一、基本介绍

PHP的array_search()函数是用来在数组中搜索指定的值,并返回其键名的函数。如果找到指定的值,则返回该值对应的键名,如果没有找到,则返回false。

array_search()函数的语法为:

    mixed array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

其中,$needle为要搜索的值,$haystack为要搜索的数组,$strict为可选参数。如果该参数的值为true,则搜索时区分大小写和数据类型。

二、返回值

如果搜索成功,则返回键值,如果搜索失败,则返回false。需要注意的是,返回的键值是该值第一次出现在数组中的键名,而不是最后一次出现的键名。

下面的代码演示了array_search()函数的基本使用方法:

    $arr = array('1'=>'apple', '2'=>'banana', '3'=>'cherry');
    $index = array_search('banana', $arr);
    echo 'the index of \'banana\' is: '.$index;  // 输出 2

三、值类型的判断

如果在搜索的数组中,值的类型不同,则需要使用第三个参数$strict,来确定搜索时是否区分类型。

下面的代码中,$arr数组中包含一个整数2和一个字符串’2’,如果不使用$strict,则无法区分它们:

    $arr = array(1, 2, '2', '3');
    $index = array_search('2', $arr);
    echo 'the index of \'2\' is: '.$index;  // 输出 1
    $index = array_search(2, $arr);
    echo 'the index of 2 is: '.$index;  // 输出 1
    $index = array_search('2', $arr, true);
    echo 'the index of \'2\' is: '.$index;  // 输出 false

四、默认键名数组的搜索

如果要搜索的数组没有指定键名,则默认的键名是从0开始的数字索引。因此,如果搜索的值为0,则需要特别注意:

    $arr = array(0, '1', '2');
    $index = array_search(0, $arr);
    echo 'the index of 0 is: '.$index;  // 输出 0

由于0为数组的默认键名,因此上面的代码输出的是0。

五、值为null或空字符串的搜索

如果要搜索的值为null或空字符串,则需要使用全等号(===)进行严格比较。因为array_search()函数使用的是弱类型比较(==),所以在搜索这些值时可能会出现一些问题。

    $arr = array(null, '', 'foo', 'bar');
    $index = array_search('', $arr);
    echo 'the index of \'\' is: '.$index;  // 输出 0
    $index = array_search(null, $arr);
    echo 'the index of null is: '.$index;  // 输出 false
    $index = array_search(null, $arr, true);
    echo 'the index of null is: '.$index;  // 输出 0

在上面的代码中,由于null和空字符串是不同类型的值,因此在搜索时需要使用严格比较。

六、多个结果的搜索

如果要搜索多个具有相同值的元素,则只返回最先找到的那个元素的键名。

    $arr = array('apple', 'banana', 'cherry', 'banana');
    $index = array_search('banana', $arr);
    echo 'the index of \'banana\' is: '.$index;  // 输出 1

七、搜索区间的限制

如果只需要在数组的一部分中搜索,可以使用array_slice()函数,将需要搜索的部分切割成一个新的数组,再对该数组进行搜索。

    $arr = array('apple', 'banana', 'cherry', 'orange');
    $index = array_search('banana', array_slice($arr, 1, 2));
    echo 'the index of \'banana\' is: '.$index;  // 输出 false

在上面的代码中,将$arr数组从第二个元素开始切割,取两个元素进行搜索。由于这个部分没有banana元素,因此搜索失败。

八、使用回调函数进行搜索

如果需要自定义搜索的规则,则可以通过在array_search()函数中使用回调函数来实现。

    function my_search($n) {
        return $n > 2;
    }
    $arr = array(1, 2, 3, 4, 5);
    $index = array_search(true, array_map('my_search', $arr));
    echo 'the index of first number greater than 2 is: '.$index;  // 输出 2

在上面的代码中,使用array_map()函数对数组中的每个元素应用my_search()函数,将结果转换为一个新的数组。然后在该数组中搜索true值,找到第一个大于2的元素的键名。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/229137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-10 12:08
下一篇 2024-12-10 12:08

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • PHP和Python哪个好找工作?

    PHP和Python都是非常流行的编程语言,它们被广泛应用于不同领域的开发中。但是,在考虑择业方向的时候,很多人都会有一个问题:PHP和Python哪个好找工作?这篇文章将从多个方…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29

发表回复

登录后才能评论