搜索

首页  >  问答  >  正文

如何用JSON对象填充一个数组?

我有一个文件,名为parts.json,它是一个包含一些车辆备件对象数组的JSON文件。

这是其中一部分的示例:


[
    {
        "name": "u0625u0643u0635u062fu0627u0645 u0623u0633u0648u062f u062eu0641u064au0641",
        "category": "u0625u0643u0635u062fu0627u0645u0627u062a",
        "quantity": "2",
        "price": "55",
        "id": 1756378,
        "shelf": "30",
        "slot": "173"
    },
    {
        "name": "u0625u0643u0635u062fu0627u0645 u0623u0633u0648u062f u0645u062du0645u0644",
        "category": "u0625u0643u0635u062fu0627u0645u0627u062a",
        "quantity": "2",
        "price": "90",
        "id": 1181335,
        "shelf": "",
        "slot": ""
    }

在我的index.php文件中,我有一个包含文本输入框和一个提交按钮的表单。我想添加搜索功能,这样每当点击提交按钮时,一个表格就会被填充上所有的备件信息。

为此,我创建了两个函数,如下所示:


function getParts()
{
    return json_decode(file_get_contents(__DIR__ . '/parts.json'), true);
}

function getPartByName($name)
{
    $parts = getParts();
    foreach ($parts as $part) {
        if (str_starts_with($part['name'], $name)) {
            return $part;
        }
    }
    return '';
}

问题是当我使用这段代码时:

$searchedPart = $_POST['searched-part'];
  $partToBeSearched = trim($searchedPart); 
  echo getPartByName($partToBeSearched)['name'];

我得到的是以输入的前缀开头的备件名称的第一个匹配项。

P粉470645222P粉470645222503 天前438

全部回复(1)我来回复

  • P粉658954914

    P粉6589549142023-07-21 09:31:18

    getPartByName函数中的返回值只能返回一个元素。

    如果您想要多个结果,那么您应该返回一个数组。

    1. 我们在方法中定义一个数组。
    2. 我们为与过滤器相对应的每个元素向数组添加一个元素。
    3. 我们返回这个数组。
    function getPartByName($name)
    {
        $matches = [];
    
        $parts = getParts();
        foreach ($parts as $part) {
            if (str_starts_with($part['name'], $name)) {
                $matches[] = $part;
            }
        }
    
        return $matches;
    }
    

    在线尝试 (已更新文本,使其比使用编码字符更容易理解)

    回复
    0
  • 取消回复