根据搜索值的部分匹配过滤多维数组

新手上路,请多包涵

我正在寻找给定此数组的函数:

 array(
 [0] =>
  array(
   ['text'] =>'I like Apples'
   ['id'] =>'102923'
 )
 [1] =>
  array(
   ['text'] =>'I like Apples and Bread'
   ['id'] =>'283923'
 )
 [2] =>
  array(
  ['text'] =>'I like Apples, Bread, and Cheese'
  ['id'] =>'3384823'
 )
 [3] =>
  array(
  ['text'] =>'I like Green Eggs and Ham'
  ['id'] =>'4473873'
 )
etc..

我要找针

“面包”

并得到以下结果

[1] =>
  array(
   ['text'] =>'I like Apples and Bread'
   ['id'] =>'283923'
 )
 [2] =>
  array(
  ['text'] =>'I like Apples, Bread, and Cheese'
  ['id'] =>'3384823'

原文由 Chamilyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 322
2 个回答

使用 array_filter 。您可以提供一个回调来决定哪些元素保留在数组中,哪些元素应该被删除。 (回调的返回值 false 表示应该删除给定的元素。)像这样:

 $search_text = 'Bread';

array_filter($array, function($el) use ($search_text) {
        return ( strpos($el['text'], $search_text) !== false );
    });

想要查询更多的信息:

原文由 Jon Gauthier 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 PHP8 开始,有一个新函数可以返回一个布尔值来表示子字符串是否出现在字符串中(这是作为 strpos() 的一个更简单的替代品)。

海峡包含()

这需要在迭代函数/构造中调用。

从 PHP7.4 开始,可以使用箭头函数来减少整体语法并将全局变量引入自定义函数的范围。

代码:( 演示

 $array = [
    ['text' => 'I like Apples', 'id' => '102923'],
    ['text' => 'I like Apples and Bread', 'id' =>'283923'],
    ['text' => 'I like Apples, Bread, and Cheese', 'id' => '3384823'],
    ['text' => 'I like Green Eggs and Ham', 'id' =>'4473873']
];

$search = 'Bread';
var_export(
    array_filter($array, fn($subarray) => str_contains($subarray['text'], $search))
);

输出:

 array (
  1 =>
  array (
    'text' => 'I like Apples and Bread',
    'id' => '283923',
  ),
  2 =>
  array (
    'text' => 'I like Apples, Bread, and Cheese',
    'id' => '3384823',
  ),
)

原文由 mickmackusa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏