繁体   English   中英

PHP - strpos对我不起作用?

[英]PHP - strpos doesn't work correctly for me?

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

从手册中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';
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM