简体   繁体   English

PHP - strpos对我不起作用?

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

So I am trying to search through JSON, using strpos for it, but it doesn't for me. 所以我试图通过使用strpos搜索JSON,但它不适合我。 I always get that "Items doesn't exist". 我总是得到“物品不存在”。

Here's the PHP 这是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';
        }
    }
}

Here's the Example JSON 这是示例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"}

From the manual the return value of strpos : 从手册中strpos的返回值:

Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset). 返回针存在于相对于haystack字符串开头的位置(与offset无关)。 Also note that string positions start at 0, and not 1. 另请注意,字符串位置从0开始,而不是1。

Returns FALSE if the needle was not found. 如果未找到针,则返回FALSE。

So, I suggest you to change this part of your code: 所以,我建议你改变代码的这一部分:

if(strpos($data['name'], $searchq) === true)

to

if(strpos($data['name'], $searchq) !== FALSE)

Updating my answer according to the comments below. 根据以下评论更新我的答案。

The JSON needs to follow the following notation in order for the code above to work: 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"
   }
]};

Updating my answer according to the comments below. 根据以下评论更新我的答案。

OK, I made some changes to your script to deal correctly with the JSON file. 好的,我对您的脚本进行了一些更改,以正确处理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