2015-11-14 5 views
2

Как я могу вернуть массив, если он совпадает с одним конкретным полем.искать массив и возвращать массив

Чтобы сделать его более ясным, предположим, что у меня есть массив, который выглядит так ---

[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

Почему бы не заполнить $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; 
} 
+0

Большое спасибо за ваш великий ответ :) –

2

preg_grep - Возвращает массив вхождений, которые соответствуют шаблону

Так что в вашем случае она возвращает product_name. И вам нужен весь массив, который вы искали, т.е. $v:

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

Большое спасибо за ваш великий ответ :) –

Смежные вопросы