嗨,我在一个文件夹中有许多 json 格式的数据文件。 现在我想在其中搜索一个文件。我的搜索词可能不存在于其中一些文件中,而可能存在于其中一个文件中。 我已经阅读了这个函数,如果没有在文件中退出,我会调用该函数来读取另一个文件。 当我回显结果显示我并且工作正常但返回不起作用并且没有返回数据。
function get_shenavari_in_files($search,$type)
{
static $counter =1 ;
$darsadi = 0;
$find = false;
$file_name = get_files_in_dir(); // make an array of file names
$file_number = count($file_name)-$counter ;
$file="files/" .$file_name[$file_number];
$file_data = read_json($file);
for($i = 0 ; $i<count($file_data) ; $i++)
{
if($file_data[$i][$type] == $search )
{
$darsadi = $file_data[$i]['darsadi'] ;
$find = true;
echo $darsadi ; //this works and show the data
return $darsadi; // this is my problem no data return.
break;
}
}
if($find == false)
{
$counter ++;
get_shenavari_in_files($search,$type);
}
}
var_dump(get_shenavari_in_files('Euro','symbol')); //return null
答案 0 :(得分:0)
一旦你递归到 get_shenavari_in_files
,任何找到的值都不会返回给初始调用者,即代替
if($find == false)
{
...
get_shenavari_in_files($search,$type);
}
您只需在函数调用前加上 return
语句
if($find == false)
{
...
return get_shenavari_in_files($search,$type);
}
话虽如此,我会尝试一种更简单(因此更不容易出错)的方法,例如:
function get_shenavari_in_files($search, $type) {
$files = glob("files/*.json"); // Get names of all JSON files in a given path
$matches = [];
foreach ($files as $file) {
$data = json_decode(file_get_contents($file), true);
foreach ($data as $row) {
if (array_key_exists($type, $row) && $row[$type] == $search) {
$matches[$file] = $search;
}
}
}
return $matches;
}
这样,您就无需递归调用 get_shenavari_in_files
。此外,该函数本身会变得更加高效,因为它不必一遍又一遍地扫描文件系统。