PHP - strpos对我来说无法正常工作吗?

时间:2016-06-05 14:40:53

标签: php json

所以我试图通过使用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":"&#x2605 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"}

1 个答案:

答案 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';
    }
}