如果字符串包含我的数组 - PHP,的 2 个元素,则首先显示



我有一个包含单词列表的数组:

myArray = array(first, time, sorry, table,...);

和一个 JSON :

{
    "products": {
        "0": {
            "title": "myTitle",
            "url": "xxxxxx",
            "id": "329102"
        },
        "1": {
            "title": "myTitle",
            "url": "",
            "id": "439023",
        },...
     }
}

我做一个循环,如果标题包含myArray的一个单词,我就会显示它。

    function strposArray($haystack, $needle, $offset=0) {
        if(!is_array($needle)) $needle = array($needle);
        foreach($needle as $query) {
            if(stripos($haystack, $query, $offset) !== false) return true;
        }
        return false;
    }

    foreach ( $parsed_json['products'] as $item ) {
        if (!empty($item['title'])) { $title = $item['title']; } else { $title = ''; }

        if ( strposArray($title, $myArray) ) {
            echo '<li>' .$title. '</li>';
        }
    }

我对这段代码没有问题,但我想改进结果。

如果标题包含myArray的多个元素,我希望它出现在列表的顶部。

第一个 ->多个元素

第二个 ->一个元素

提前谢谢你

此函数应该完全按照您的要求执行:

function sortByWords(array $words, array $products){
    $results = [];
    foreach($products as $product){
        $elementCount = 0;
        foreach($words as $word){
            if(stripos($product['title'], $word) !== false){
                $elementCount++;
            }
        }
        if($elementCount > 0){
            $results[] = ['elementCount' => $elementCount, 'product' => $product];
        }
    }
    usort($results, function($a, $b){
        return $a['elementCount'] < $b['elementCount'];
    });
    return $results;
}

尝试var_dump函数的结果。生成的数组如下所示:

C:UsersThomasProjectsfile.php:28:
array (size=3)
  0 => 
    array (size=2)
      'elementCount' => int 3
      'product' => 
        array (size=1)
          'title' => string 'Apple Orange Peach' (length=18)
  1 => 
    array (size=2)
      'elementCount' => int 2
      'product' => 
        array (size=1)
          'title' => string 'Apple Orange' (length=12)
  2 => 
    array (size=2)
      'elementCount' => int 1
      'product' => 
        array (size=1)
          'title' => string 'Peach' (length=5)

这是您访问结果的方式。

$results = sortByWords($words, $products);
foreach($results as $result){
    $product = $result['product'];
    // now you can access your title, url and id from the $product array.
    echo $product['title'];
    // if you need the number of elements in the title, you can use $result['elementCount']
}

相关内容

  • 没有找到相关文章

最新更新