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

时间:2016-08-14 11:04:54

标签: php arrays

我的变量值为

$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]
        ];
    }
}

但是它给出了错误

函数名称必须是字符串...

任何人都可以解释什么是错的,什么可以解决?

2 个答案:

答案 0 :(得分:1)

下面的函数只是检查给定数组中是否包含给定的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()(也是demoed here)会产生:

    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_dumpdemoed here)的结果如下所示:

    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

答案 1 :(得分:0)

你正在调用一个本地php函数,其前面有一个$$strpos

它正在搜索名为$strpos的变量,并尝试传递2个变量。 但由于$strpos没有变量集,因此返回NULL并得到该错误。