我有一个大数组[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)"
答案 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