【问题标题】:Get the array value that contains keywords获取包含关键字的数组值
【发布时间】:2017-03-09 03:45:41
【问题描述】:

使用 array_filter 我可以使用搜索表单(文本输入)显示我的数组数据。但我无法显示所有包含关键字的数组。

例如我正在搜索关键字“产品 1 测试

它应该显示名称为 Product1test 的所有产品以及描述包含 Product 的产品, 1, 测试

我的数组如下所示:

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

});

有什么想法吗?

【问题讨论】:

  • 将关键字按空格分解成一个数组并循环遍历每个关键字。
  • 您要查找名称中包含“Product”或“1”或“test”或描述中包含“Product”或“1”或“test”的产品吗?跨度>
  • @erisco 是的..这就是我想做的..

标签: php arrays array-filter


【解决方案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";
    }

});


?>

【讨论】:

  • 干得好..谢谢。我必须对你的代码做些小改动才能实现我想做的事情。
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2023-01-10
  • 2018-08-08
相关资源
最近更新 更多