如何用JSON对象填充数组

wbrvyc0a  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(99)

我有一个文件parts.json,它是一个JSON文件,包含一个对象数组,表示一些车辆的备件。
下面是它的一个片段:

[
    {
        "name": "\u0625\u0643\u0635\u062f\u0627\u0645 \u0623\u0633\u0648\u062f \u062e\u0641\u064a\u0641",
        "category": "\u0625\u0643\u0635\u062f\u0627\u0645\u0627\u062a",
        "quantity": "2",
        "price": "55",
        "id": 1756378,
        "shelf": "30",
        "slot": "173"
    },
    {
        "name": "\u0625\u0643\u0635\u062f\u0627\u0645 \u0623\u0633\u0648\u062f \u0645\u062d\u0645\u0644",
        "category": "\u0625\u0643\u0635\u062f\u0627\u0645\u0627\u062a",
        "quantity": "2",
        "price": "90",
        "id": 1181335,
        "shelf": "",
        "slot": ""
    }

字符串
在我的index.php中,我有一个输入类型为text的表单,还有一个输入类型为submit。我想添加搜索功能,以便在点击submit时,所有备件都应填写在一个表中。
为此,我创建了两个函数,如下所示:

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'];


我获得了名称以输入的前缀开头的备件的第一个示例。

9lowa7mx

9lowa7mx1#

getPartByName中的return只能返回一个元素。
如果你想要多个结果,那么你应该返回一个数组。
1.我们在方法中定义一个数组
1.我们为对应于过滤器的每个元素添加一个元素到数组中
1.我们返回数组

function getPartByName($name)
{
    $matches = [];

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

    return $matches;
}

字符串
Try it online(文本已更新,因此比编码字符更容易理解)
我们也可以在不使用循环的情况下编写以下代码:

function getPartByName($name)
{
    $parts = getParts();
    return array_filter(
        $parts,
        function($item1) use ($name) {
          if (str_starts_with($item1['name'], $name)) {
              return $item1;
          } else {
              return null;
          }
        }
    );
}


array_filter将对每个项目应用匿名函数,它将删除与条件不匹配的值。
Try it online

相关问题