搜索数组并返回数组

时间:2015-11-14 10:37:01

标签: php arrays

如果一个数组与一个特定字段匹配,我将如何返回该数组。

为了更清楚,假设我有一个看起来像这样的数组---

[1] => Array
    (
        [id] => 11
        [category] => phone cases
        [sale_price] => 90,99
        [price] => 120
        [product_name] => "iphone 6 plus" case transparent
    )

[2] => Array
    (
        [id] => 13
        [category] => shoes
        [sale_price] => 180,99
        [price] => 200
        [product_name] => blue platform shoes
        )

[3] => Array
    (
        [id] => 14
        [category] => wallet
        [sale_price] => 150
        [price] => 250
        [product_name] => valvet wallet

所以我想要的是,如果我搜索 valvet ,它应该在数组的 [product_name] 字段中搜索并返回包含其他字段的数组同样。

例如---

如果我搜索 valvet ,它应该返回 -

[0] => Array
    (
        [id] => 14
        [category] => wallet
        [sale_price] => 150
        [price] => 250
        [product_name] => valvet wallet
    )

这是我的PHP代码,我正在尝试做什么 -

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

但它只返回["product_name"]而不是匹配的数组!!

我如何解决这个问题,有人可以帮助我解决这个问题!!!

2 个答案:

答案 0 :(得分:2)

为什么不用$ret填充$v

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

    return $ret;
}

答案 1 :(得分:2)

  

preg_grep - 返回与模式匹配的数组条目

因此,在您的情况下,它会返回product_name。你需要整个阵列,你搜索即。 $v

if (!empty($res)) $ret[$k] = $v;