如何找到数组中的键?

时间:2019-06-08 19:40:55

标签: php arrays linux

我有一个大数组[3744](从文件中读取)。 数组键始终更改,并且没有相同的值。

首先运行Blu-Ray:

输出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)"

2 个答案:

答案 0 :(得分:1)

您正在获取文件的第一行,因为array_search()如果无法在数组中找到所需内容,则返回布尔值FALSE,因此$key设置为FALSE。然后,当您执行echo $BD_Info_array[$key];时,$key被解释为整数0,因此,您获得的结果基本上与执行echo $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()查找该行-但请注意,{{1 }}如果找不到匹配项,则还返回strpos(),如果匹配则返回数字值(可能为0,因此求值为FALSE)。

答案 1 :(得分:0)

我是这样解决的:

/// get size
$lines = file('../BD_Info');
$searchstr = 'TINFO:0,10,0,';

foreach ($lines as $line) {
    if(strpos($line, $searchstr) !== false) {
        $size[] = $line;
    }
}

echo $size[0];                  //// OUTPUT > TINFO:0,10,0,"36.9 GB" 
echo substr($size[0], 14, -2);  //// OUTPUT > 36.9 GB