所以我试图通过使用strpos搜索JSON,但它不适合我。我总是得到“物品不存在”。
这是PHP
$getItems = file_get_contents('Items.json');
$decodeItems = json_decode($getItems,true);
//$output = ''.$decodeItems['items'][0]['name'].'';
$output = '';
if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
foreach($decodeItems['items'] as $data){
if($chance = strpos($data, $searchq) !== FALSE){
if($data['name'] == $chance){
$name = $data['name'];
$output .= "<div>".$name."</div>";
}
}
else{
$output = 'Items no';
}
}
}
这是示例JSON
{"img":"-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXU5A1PIYQh5hlcX0nvUOGsx8DdQBJjIAVHubSaIAlp1fb3YihQ-tWglYy0lfjjOr6fxjpQ7MFz373Fodyl0AXh-ENkMWinJ4eXcA8-ZFHUq1K_xum70ZO56oOJlyUgjHI5fA","name":"★ Bowie Knife","assetid":"6442574944","myprice":"155.36","condition":"","originalname":"\u2605 Bowie Knife","inspect":"steam:\/\/rungame\/730\/76561202255233023\/+csgo_econ_action_preview%20S76561198034643020A6442574944D2305887113904442996","special":"0","floatvalue":null,"bitskinsprice":"117.36"}
答案 0 :(得分:3)
从手册中strpos的返回值:
返回针存在于相对于haystack字符串开头的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1。
如果未找到针,则返回FALSE。
所以,我建议你改变代码的这一部分:
if(strpos($data['name'], $searchq) === true)
到
if(strpos($data['name'], $searchq) !== FALSE)
根据以下评论更新我的答案。
JSON需要遵循以下表示法才能使上述代码正常工作:
{"items":[
{
"img":"img1",
"name":"name1",
"assetid":"1",
"myprice":"155.36",
"condition":"",
"originalname":"name1 original",
"inspect":"whatever",
"special":"0",
"floatvalue":null,
"bitskinsprice":"117.36"
},
{
"img":"img2",
"name":"name2",
"assetid":"2",
"myprice":"175.11",
"condition":"",
"originalname":"name2 original",
"inspect":"whatever2",
"special":"0",
"floatvalue":null,
"bitskinsprice":"55.55"
}
]};
根据以下评论更新我的答案。
好的,我对您的脚本进行了一些更改,以正确处理JSON文件。
$getItems = file_get_contents('Items.json');
$decodeItems = json_decode($getItems,true);
//$output = ''.$decodeItems['items'][0]['name'].'';
$output = '';
if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
foreach($decodeItems['items'] as $data){
// this was *if($chance = strpos($data, $searchq) !== FALSE){*
if(strpos($data['name'], $searchq) !== FALSE) {
// here was another unneeded *if($data['name'] == $chance){*
$name = $data['name'];
$output .= "<div>".$name."</div>";
}
}
if (empty($output)) {
$output = 'Items no';
}
}