in_array 与 isset - 性能

2024-07-01

考虑以下代码片段:

例子#1

$array = Array(1,2,3,4,5,6,7);
$array_test = Array(3,5,4,7,3,6,7,8,8,9,3);

foreach($array_test as $value) {
   if(in_array($value, $array)) {
       // do some magic here
   }
}

例子#2

$array = Array(1,2,3,4,5,6,7);
$array_test = Array(3,5,4,7,3,6,7,8,8,9,3);

$array_index = Array();
foreach($array as $value) {
    $array_index[ $value ] = true;
}

foreach($array_test as $value) {
   if(isset($array_index[ $value ])) {
       // do some magic here
   }
}

显然,这两个片段执行相同的工作。在某些数组示例中,示例#1 比示例#2 更快。

我确信我们都遇到过这两种情况,但我的问题是:

  • 我应该总是选择#2吗?
  • 我什么时候应该选择#1?当尺寸为$array * $array_test
  • 在特定情况下如何确定哪种方法更好?
  • 除了使用临时表之外,也许还有其他技巧$array_index。我不记得其他编程语言中有类似的情况,一切都准备好了

也请注意关联键。

有人已经问过非常类似的问题:

  • in_array 和 isset 哪个更快? https://stackoverflow.com/questions/13483219/what-is-faster-in-array-or-isset

在第二个示例中,您必须构造“翻转”值$array在你可以使用之前isset()。顺便说一句,你也可以使用array_flip() http://www.php.net/array_flip为了那个原因。

如果您可以立即使用数组键(无需转换),请使用isset()因为它显然比in_array()由于查找键的方式and因为它是一种语言构造。

如果您无法在不转换的情况下使用密钥,您可以考虑使用in_array()对于小阵列。对于更大的数组,可能值得运行基准测试来确定数组转换步骤是否仍然值得。

最后,很大程度上取决于具体情况,您可以使用其中之一array_intersect_函数也是如此,主要是为了避免在 PHP 代码中循环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

in_array 与 isset - 性能 的相关文章

  • 可以用 PHP 设置表单字段值吗?

    我使用 GET 函数从 url http index html variable value 中提取一个带有 php 的值 这是基本的东西 但是 我需要在我的表单中使用该值 通常 我会设置 或类似的东西 但是 我无法使用我正在使用的编辑器在
  • 当用户使用 Internet Explorer 时重定向到新页面

    我使用下面的代码将使用 Internet Explorer 的用户重定向到新页面 但显然代码有问题 因为当我使用 Internet Explorer 时该网站不再加载 这是代码 由于我不知道我做错了什么 如果有人可以发布使用正确编码的正确方
  • 获取Java InputStream后面的文件的字节数

    正如标题所示 我需要知道文件在输入流 后面 有多少字节 我不想下载所有字节和计数 需要很长时间 我只需要知道文件有多少字节 像这样 int numberOfBytes countBytes inputStream 所以 我需要 countB
  • 在 PHP 中格式化 JSON 格式的文本文件

    所以我得到了一个带有按钮的 HTML 页面 当我单击该按钮时 一个单独的 javascript 文件会向我的 PHP 文件发送 GET 请求 并期望返回 JSON 对象 我的 PHP 读取 JSON 格式的文本文件 并将其转换为 JSONO
  • 将一串数字转换为数组

    我在创建将数字字符串转换为数组的程序时遇到问题 我知道这里有一个类似的问题 但我所要做的只是一组数字 例如 10 15 16 0 57 438 57 18 这是我到目前为止所拥有的 import java util Scanner publ
  • Bash:如何打印并运行其中包含管道运算符 | 的 cmd 数组

    这是我的问题的后续 当命令的参数带有空格或要扩展的内容时 如何编写 bash 函数来打印和运行命令 https stackoverflow com q 71117953 4561887 假设我有这个函数来打印并运行存储在数组中的命令 Pri
  • 将静态站点生成器与 php 集成

    我目前正在使用 php 构建一个不需要定期更新的网站 并且我考虑使用静态站点生成器 因为它将具有类似博客的功能 然而 我的网站包含一个将与数据库链接的表单 我遇到的问题是静态站点生成器无法识别和解析 php 我目前正在考虑使用三个静态站点生
  • 删除一行或多行后,在 auto_increment 列上使用下一个可能的主键

    我有一个带有主键 自动增量 ID 列的表 当我删除具有最高 ID 的行 例如 ID 100 时 我想仅使用 mysql 触发器将该 ID 100 用于新行 我怎么做 当我删除时 例如 ID 1 并且最高 ID 是 100 我不想再次使用 I
  • 谷歌纬度返回空位置资源。这个 Oauth 流程有什么问题吗?

    使用示例我有这段代码 它工作正常 授权适当的范围和一切
  • 插入正确的登录详细信息(即用户名和密码)、php 和 jquery 中的代码后,我的代码登录失败

    我有以下代码 php 和 jquery 用于学生和教师的登录 使用相同的表单进行访问 在我的系统中 管理员可以创建学生和教师 创建后 详细信息将保存到数据库中 保存的详细信息应该用于登录其管理面板 但是 问题是 当学生或教师想要使用管理员提
  • 文件上传:完成百分比进度条

    我正在尝试为头像上传添加 到目前为止完成的百分比 进度条巴迪出版社 https github com buddypress BuddyPress 目的是阻止用户在上传完成之前离开页面 上传过程由 BuddyPress 处理bp core a
  • 有 PHP 函数可以解决这个问题吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对不起 我希望这并不奇怪或什么 我该如何修复这个编码 您遇到的情况是数据以一种编码写入并解释为另一种编码的结果 您需要确保请求输入的格
  • 以另一种风格制作一个带有形状和偏移参数的 numpy 数组

    我想以 3 元素实体 3d 位置 和单个元素 每个 x y z 坐标 的形式访问我的数组 经过一番研究后 我最终做了以下事情 gt gt gt import numpy as np gt gt gt arr np zeros 5 dtype
  • XML 解析器错误:未定义实体

    我在 stackoverflow 上搜索了这个问题 并找到了一些主题 但我觉得在这个问题上没有真正可靠的答案 我有一个用户提交的表单 字段的值存储在 XML 文件中 XML 设置为使用 UTF 8 编码 用户时不时地会从某处复制 粘贴文本
  • laravel 5.1 在没有重新启动虚拟机的情况下看不到作业文件的更改

    我在 Laravel 5 1 应用程序中创建了一个新作业 在 Homestead VM 中运行 我已将其设置为排队并在句柄方法中有代码 handle 方法之前需要传递一个参数 但现在不再需要 我已从handle 方法中删除了该参数 但是 当
  • awk 单引号或双引号的用法

    为什么 awk 命令使用单引号和双引号不能产生相同的结果 root vm90 root who awk print 2 root vm90 root who awk print 2 我想在 PHP shell exec 函数中使用 awk
  • 如何 ?将表单发布到多个位置

    我有一个表单需要发布到多个脚本 我怎样才能以最简单的方式做到这一点 我知道这可以用 Javascript Curl 或 Snoopy 类来完成 但实际上这是最简单和最好的方法 其中一个脚本发送电子邮件 它是一个 php 文件 另一个脚本托管
  • PHPStorm + PHPUnit 颜色输出

    因此 我在 PHPStorm 7 1 中运行 PHPUnit 但我不知道如何在测试中使 ANSI 颜色代码正常工作 我的 PHPunit xml 有colors true 在属性列表中 但每次我尝试类似的操作 echo 033 31mErr
  • Debian Jessie - Apache2 / PHP 5.6,无法上传超过 128kb

    我有一个问题让我发疯 我最近将我的服务器更新为 Jessie 希望我现在没有更新 但自从更新后 我无法在单次上传中上传超过 128KB 的文件 我已经尝试了所有常见的明显选项 检查 php ini 的最大文件大小 执行时间等 但没有解决方案
  • Debian Jessie - Apache2 / PHP 5.6,无法上传超过 128kb

    我有一个问题让我发疯 我最近将我的服务器更新为 Jessie 希望我现在没有更新 但自从更新后 我无法在单次上传中上传超过 128KB 的文件 我已经尝试了所有常见的明显选项 检查 php ini 的最大文件大小 执行时间等 但没有解决方案

随机推荐