我有一个值为
的变量$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
,您会得到那个错误。