Php preg_match()要求参数2为字符串,数组给定

Php preg_match()要求参数2为字符串,数组给定,php,arrays,regex,Php,Arrays,Regex,数组搜索返回错误 假设我有一个这样的数组--- 现在我试图从这个数组中搜索一些东西,基本上我是从$all_数据,['product_name']字段中查找它 $data = 'plus'; // what i want to search $search = $this->my_array_search($all_data, $data); function my_array_search($array, $string) { $pattern = preg_replace('

数组搜索返回错误

假设我有一个这样的数组---

现在我试图从这个数组中搜索一些东西,基本上我是从$all_数据,['product_name']字段中查找它

$data = 'plus'; // what i want to search
$search = $this->my_array_search($all_data, $data);


function my_array_search($array, $string) {
    $pattern = preg_replace('/\s+/', ' ', preg_quote($string));
    return array_filter($array, function ($value) use($pattern) {
        return preg_match('/' . $pattern . '/', $value) == 1;
    });
}
但它总是给我一个错误--

preg_match()要求参数2为字符串,数组给定


我做错了什么,有人知道如何解决这个问题吗

像这样的东西就可以了——正如有人指出的,你有一个嵌套数组,一层深

$data = 'plus'; // what i want to search
$search = $this->my_array_search($all_data, $data);


function my_array_search($array, $string) {
    for ($i=0; $i< count($array); $i++)
    {
        $pattern = preg_replace('/\s+/', ' ', preg_quote($string));
        return array_filter($array[$i], function ($value) use($pattern) {
            return preg_match('/' . $pattern . '/', $value) == 1;
        });
    }

}
$data='plus';//我想搜索什么
$search=$this->my\u array\u search($all\u data,$data);
函数my_array_search($array,$string){
对于($i=0;$i

这可以改进为查看每个值并检查它是否也是一个数组,然后递归到-如果您认为这在将来可能有用,但您需要确定如何以更好的方式收集匹配项这是因为您正在筛选一个包含数组的数组

搜索数组的正确正则表达式函数是。它返回一个匹配数组。
(不要忘记用
preg\u quote
指定分隔符)

。结果数组将包括:
=>
数组(匹配项)

若要仅在PHP版本>=5.5时搜索特定列,请尝试使用


如果您想匹配不区分大小写并在需要时添加,请使用
i

顶级数组中的项是数组,而不是字符串。@MaratTanalin如果我从数组中搜索,
$value
是数组,
$value['product\u name']
是该数组中您似乎感兴趣的字符串。@Sammitch yes,那么我应该如何从
['product\u name']
字段中进行搜索呢!
$data = 'plus'; // what i want to search
$search = $this->my_array_search($all_data, $data);


function my_array_search($array, $string) {
    for ($i=0; $i< count($array); $i++)
    {
        $pattern = preg_replace('/\s+/', ' ', preg_quote($string));
        return array_filter($array[$i], function ($value) use($pattern) {
            return preg_match('/' . $pattern . '/', $value) == 1;
        });
    }

}
$data = 'plus'; // what i want to search
$search = my_array_search($all_data, $data);

function my_array_search($array, $string)
{
    $ret = false;
    $pattern = preg_replace('/\s+/', ' ', preg_quote($string, '/'));
    foreach($array AS $k => $v) {
      $res = preg_grep('/' . $pattern . '/', $v);
      if(!empty($res)) $ret[$k] = $res;
    }

    return $ret;
}
array(1) {
  [1]=>
  array(2) {
    ["product_name"]=>
    string(32) ""iphone 6 plus" case transparent"
    ["description"]=>
    string(34) "transparent case for iphone 6 plus"
  }
}
print_r(preg_grep('/plus/', array_column($all_data, 'product_name')));