2017-03-09 26 views
2

使用array_filter我能夠使用搜索表單(文本輸入)顯示我的數組數據。但我無法顯示包含關鍵字的所有數組。獲取包含關鍵字的數組值

比如我搜索關鍵字「產品1個測試

應該顯示所有產品名稱爲產品,,測試和產品與包含產品描述,,test

我的數組看起來像這樣:

$p_arrays[] = array('name'=> 'Product 1','description' => 'Test Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'location' => 'A city', 'type' => 'Type 1', 'status' => 'new', 'tags'=>'', 'page_url'=>'p1.html', 'image'=>'products/assets/images/1/prod-image.jpg'); 

$p_arrays[] = array('name'=> 'Product 2','description' => 'Test Donec eleifend quam neque, ut mollis massa aliquet id.', 'location' => 'B city', 'type' => 'Type 1', 'status' => 'under', 'tags'=>'', 'page_url'=>'p2.html', 'image'=>'products/assets/images/2/prod-image.jpg'); 

$p_arrays[] = array('name'=> 'Product 3','description' => 'Nam non tristique mi.', 'location' => 'A city', 'type' => 'Type 3', 'status' => 'new', 'tags'=>'', 'page_url'=>'p3.html', 'image'=>'products/assets/images/3/prod-image.jpg'); 

$p_arrays[] = array('name'=> 'Product 4','description' => 'Vestibulum accumsan dolor id orci gravida viverra.', 'location' => 'C city', 'type' => 'Type 2', 'status' => 'new', 'tags'=>'', 'page_url'=>'p4.html', 'image'=>'products/assets/images/4/prod-image.jpg'); 

我至今嘗試過..

if (isset($_POST['keyword-input']) && $_POST['keyword-input']!=='') { 
$keywords= ($_POST['keyword-input']); 

$p_arrays = array_filter($p_arrays, function($p) use ($keywords) { 
    return (stripos(($p['description']), $keywords) !== false) || (stripos(($p['name']), $keywords) !== false); 

}); 

什麼想法?

+0

將關鍵字按空格分解爲數組並遍歷每個關鍵字。 – mkaatman

+0

是否要查找名稱含有「產品」或「1」或「測試」的產品或含有「產品」或「1」或「測試」的描述? – erisco

+0

@erisco是..這就是我想要做的.. –

回答

1

下面是一個關鍵字斷開和循環遍歷數組的詳細示例。

<?php 

$p_arrays[] = array('name'=> 'Product 1','description' => 'Test Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'location' => 'A city', 'type' => 'Type 1', 'status' => 'new', 'tags'=>'', 'page_url'=>'p1.html', 'image'=>'products/assets/images/1/prod-image.jpg'); 
$p_arrays[] = array('name'=> 'Product 2','description' => 'Test Donec eleifend quam neque, ut mollis massa aliquet id.', 'location' => 'B city', 'type' => 'Type 1', 'status' => 'under', 'tags'=>'', 'page_url'=>'p2.html', 'image'=>'products/assets/images/2/prod-image.jpg'); 
$p_arrays[] = array('name'=> 'Product 3','description' => 'Nam non tristique mi.', 'location' => 'A city', 'type' => 'Type 3', 'status' => 'new', 'tags'=>'', 'page_url'=>'p3.html', 'image'=>'products/assets/images/3/prod-image.jpg'); 
$p_arrays[] = array('name'=> 'Product 4','description' => 'Vestibulum accumsan dolor id orci gravida viverra.', 'location' => 'C city', 'type' => 'Type 2', 'status' => 'new', 'tags'=>'', 'page_url'=>'p4.html', 'image'=>'products/assets/images/4/prod-image.jpg'); 

//if (isset($_POST['keyword-input']) && $_POST['keyword-input']!=='') { 
//$keywords= ($_POST['keyword-input']); 

$keywords = "Product 1 Test"; 

$keys = explode(" ", $keywords); 

$p_arrays = array_filter($p_arrays, function($p) use ($keys) { 
    foreach($keys as $key){ 
     echo (stripos(($p['description']), $key) !== false) || (stripos(($p['name']), $key) !== false) ? "Found $key in ". print_r($p,1) . "<br>\n" : "$key not found.<br>\n"; 
    } 

}); 


?> 
+0

幹得好..謝謝。我必須從您的代碼中做出一些改變,以實現我想要做的事情。 –