Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正确编码Json?_Php_Json - Fatal编程技术网

Php 正确编码Json?

Php 正确编码Json?,php,json,Php,Json,好吧,我现在重做我的问题,这样人们就能理解我想做什么 Search.php <?php $getItems = file_get_contents('Items.json'); if(isset($_GET['searchVal'])){ $getItems2 = json_decode($getItems, true); $data2 = array("items" => array(array())); foreach($getItems2['items'

好吧,我现在重做我的问题,这样人们就能理解我想做什么

Search.php

<?php
$getItems = file_get_contents('Items.json');
if(isset($_GET['searchVal'])){
    $getItems2 = json_decode($getItems, true);
    $data2 = array("items" => array(array()));
    foreach($getItems2['items'] as $data){
        if(strpos($data['name'], $_GET['searchVal'])){
             $data2 = array("items" => array(array($data)));
        }
    }
    echo json_encode($data2,JSON_UNESCAPED_SLASHES);
} else{
    echo $getItems;
}

循环中有以下内容:

$data2 = array(...)
…然后在循环外部引用
$data2

当然,它将只包含最后一个条目,因为该行在循环每次迭代时都会用新数据覆盖
$data2

如果要保留循环中的所有记录,请使用

$data2[] = array(...)
相反

[编辑]

进一步猜测您希望JSON看起来是什么样子,我猜您希望所有记录都位于
items
数组中

在这种情况下,让我们重写
$data2
行,如下所示:

$data2['items'][] = array($data);
这将把所有数据数组添加到
$data2
中的
数组中。我会注意到你的数组结构非常复杂——嵌套数组太多了,这使得我现在很难确定我是否给出了你想要的答案,但如果它不完全正确,它将告诉你需要走的方向

您还需要在代码顶部添加一行,以初始化
$data2
,如下所示:

$data2 = array('items'=>array());

这应该在使用
$data2
之前的代码顶部的某个地方,并且在循环之外。

您能发布您的阵列吗?实际出了什么问题?另外,您的
echo json_encode
行可能应该在foreach循环之外,否则当有多个项目时,您将最终输出无效的json。是否希望
data
作为键?是的,但如果我将其从循环中移出,它将不再正确显示。如果我搜索Karambit,那么它只显示一个武器,它是M4,因为您可能应该使用
$data[]=array(…
并在循环之前定义数组。但我们不知道你在追求什么,谁知道呢。是的,使用它会很完美,但会弄乱JSON输出:/n还有其他方法吗?嗯,这取决于你的JSON输出应该是什么。你还没有真正指定。但我会尝试猜测并编辑答案y、 它几乎是完美的,唯一一件事是JSON中的
[]
,所以在$data周围去掉额外的数组()层。(我保留了原来的结构,但我想说它可能没有必要)idk会把这些放在:-像这样完美,只是不全在那里。如果我使用
$data2['items][]=array($data)
然后我想以某种方式摆脱那些