【问题标题】:what is the best way for search in json file in php?在 php 中搜索 json 文件的最佳方法是什么?
【发布时间】:2021-06-26 05:51:24
【问题描述】:

嗨,我在一个文件夹中有许多 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

【问题讨论】:

  • 稍后在您的代码中调用get_shenavari_in_files,因为这不会返回不会传回的值。

标签: php function recursion


【解决方案1】:

一旦你递归到get_shenavari_in_files,任何找到的值都不会返回给初始调用者,即,而不是

if($find == false)
{   
    ...
    get_shenavari_in_files($search,$type);
}

您只需在函数调用前加上 returnstatement

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。此外,该函数本身将变得更加高效,因为它不必一遍又一遍地扫描文件系统。

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2010-11-15
    • 2016-08-21
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多