我的变量值为
$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]
];
}
}
但是它给出了错误
函数名称必须是字符串...
任何人都可以解释什么是错的,什么可以解决?
答案 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_dump
(demoed 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
并得到该错误。