首页 > 解决方案 > 如何在数组中找到键?

问题描述

我有一个大数组 [3744](从文件中读取)。数组键总是变化的,并且没有相同的值。

首次运行蓝光:

输出 0:[55] => TINFO:0,10,0,“36.9 GB”

第二张DVD:

输出 1:[135] => TINFO:0,10,0,“5.7 GB”

但是版本的一部分是“TINFO:0,10,0”,总是一样的。

如何在我的数组中搜索“TINFO:0,10,0”以获取数组键,会很高兴吗?

<?php 
   $size=shell_exec("sudo makemkvcon -r info dev:/dev/sr0 | grep -i 'TINFO:0,10,0,'");
   $size=substr($size, 14, -2);
?>

输出很完美,但是有多个查询需要很长时间,所以我将整个输出保存在文件中。

<?php 
    $BD_Info_array = file("../BD_Info");
    $key = array_search('TINFO:0,10,0,', $BD_Info_array);
    echo $BD_Info_array[$key];
?>

在这里我得到文件的第一行,这不是我想要的。

MSG:1005,0,1,"MakeMKV v1.14.3 linux(x64-release) started","%1 started","MakeMKV v1.14.3 linux(x64-release)"

标签: phparrayslinux

解决方案


您将获得文件的第一行,因为如果在数组中找不到您要查找的内容,则array_search()返回布尔值,因此设置为 FALSE。然后,当你做时,被解释为整数,所以你基本上得到与做相同的结果。FALSE$keyecho $BD_Info_array[$key];$key0echo $BD_Info_array[0]

您应该在打印该行之前使用身份运算符===检查是否$key真的是:FALSE

if ($key === FALSE) {
  echo "Line not found!";
}
else {
  echo $BD_Info_array[$key];
}

至于为什么array_search()找不到你的线路,它的工作方式与 grep 不同。它将在数组中查找具有该确切值作为值的项。如果您希望您的 PHP 代码仅找到包含该子字符串的行,您将需要遍历由创建的数组file()并用于strpos()查找该行 - 但请注意,如果找不到匹配项,它strpos()也会返回,并且FALSE数值(可能为 0,因此计算结果为FALSE),如果是的话。


推荐阅读