检查值是否存在并存储在php中的新数组中


Check if a value is present and store in a new array in php

我有一个值为

的变量
$name=GTX 980

数组中有

Arraynames

Array ( [0] => Array ( [name] => GTX 970 [price] => 123 ) [1] => ( [name] => GTX 980 [price] => 321 ))

现在我想检查数组是否有与$name匹配的名称并存储在另一个数组中我试过这个代码

for($i=0;i<=count($shophive);$i++){
    if(strpos($shophive,$trimmedName ) !== FALSE){
        $newshophive[$i]=[
        'name' =>$shophive[$i],
        'price' =>$shophive[$i],
        'link'=>$shophive[$i],
        'image'=>$shophive[$i]
        ];
    }
}

但是它给出了错误

函数名必须是字符串…

谁能解释一下是什么错了,什么可能是一个解决方案?

下面的函数只是检查给定的String是否包含在给定的数组中。如果是,它将包含String的元素添加到一个新的数组中,并最终返回结果…

<?php
    $arr = [
        ['name'=>'GTX 970', 'price'=>123],
        ['name'=>'GTX 980', 'price'=>321],
        ['name'=>'GTX 980', 'price'=>350],
        ['name'=>'GTX 980', 'price'=>300],
        ['name'=>'ABC 980', 'price'=>305],
        ['name'=>'JHK 980', 'price'=>375],
        ['name'=>'LMN 105', 'price'=>250],
    ];
    var_dump( searchArrayTree($arr, 'GTX 980') );
    function searchArrayTree($array, $searchValue){
        $result     = [];
        foreach($array as $iKey=>$item){
            $searchKey  = array_search($searchValue, $item);
            if($searchKey){
                $result[] = $item; 
            }
        }
        return $result;
    }

上面的var_dump()(这里也演示了)产生:

    array (size=3)
      0 => 
        array (size=2)
          'name' => string 'GTX 980' (length=7)
          'price' => int 321
      1 => 
        array (size=2)
          'name' => string 'GTX 980' (length=7)
          'price' => int 350
      2 => 
        array (size=2)
          'name' => string 'GTX 980' (length=7)
          'price' => int 300

或者,使用regex,以便您可以在GTX 980等相关单词组内缩小搜索范围,并且仍然可以匹配GTX 980的所有条目:

<?php
    $arr = [
        ['name'=>'GTX 970', 'price'=>123],
        ['name'=>'GTX 980', 'price'=>321],
        ['name'=>'GTX 980', 'price'=>350],
        ['name'=>'GTX 980', 'price'=>300],
        ['name'=>'ABC 980', 'price'=>305],
        ['name'=>'JHK 980', 'price'=>375],
        ['name'=>'Le EVGA GTX 980',                 'price'=>250],
        ['name'=>'GIGABYTE GEFORCE GTX 980 W3. ',   'price'=>250],
    ];
    var_dump(searchArrayTree($arr, 'GTX 980'));
    function searchArrayTree($array, $searchTerm){
        $result     = [];
        foreach($array as $iKey=>$item){
            $itemPrice  = $item['price'];
            $itemName   = $item['name'];
            $searchKey  = preg_match("#" . preg_quote($searchTerm). "#", $itemName);
            if($searchKey){
                $result[] = $item;
            }
        }
        return $result;
    }

var_dump的结果(这里演示)看起来像这样:

    array (size=5)
      0 => 
        array (size=2)
          'name' => string 'GTX 980' (length=7)
          'price' => int 321
      1 => 
        array (size=2)
          'name' => string 'GTX 980' (length=7)
          'price' => int 350
      2 => 
        array (size=2)
          'name' => string 'GTX 980' (length=7)
          'price' => int 300
      3 => 
        array (size=2)
          'name' => string 'Le EVGA GTX 980' (length=15)
          'price' => int 250
      4 => 
        array (size=2)
          'name' => string 'GIGABYTE GEFORCE GTX 980 W3. ' (length=29)
          'price' => int 250

您正在调用一个本机php函数与$在它的前面。$strpos

它正在搜索一个名为$strpos的变量,并试图传递2个变量。但是由于没有为$strpos设置变量,它返回NULL,您会得到那个错误。