【问题标题】:PHP - Filter an array if a row contains string [closed]PHP - 如果行包含字符串,则过滤数组[关闭]
【发布时间】:2021-10-06 09:15:19
【问题描述】:

我有以下 API 输出,我基本上想在字段 relative 包含“分钟”时获取成员 ID,如何使用数组过滤器做到这一点?

members: 
    239: 
        relative: "21 minutes ago"
    941591: 
        relative: "5 hours ago"     
    4178: 
        relative: "59 minutes ago"      
    78: 
        relative: "2 hours ago"     

(不确定术语是否正确)但“relative”是成员 ID 下方的标题/字段名称,并且字段 relative 包含以下值:“59 分钟前”

我知道我可以通过遍历所有成员并检查字段来得到答案,但我不喜欢这样做

有效的答案:

$new = array_filter($idcall_array['members'], function ($var) {
    return strpos($var['relative'], 'minutes') !== false;
});

【问题讨论】:

  • 使用array_filter()?名称就在您的标题和标签中。
  • 过滤后使用array_keys()获取会员ID。
  • 对不起,我知道 array_filter() 是一个函数。在这种情况下,我主要不知道如何使用它。 (主要是检查是否包含'minutes') array_filter($array, $functiontocheckforminutes)
  • 这是多行文本还是某种符号的多维数组?
  • 我想重新打开这个问题,因为不关注 1 个问题而关闭。但这根本不正确。我可能没有完美地制定它(因为我不知道大多数事情的术语)但这是 1 个问题/问题

标签: php arrays api array-filter


【解决方案1】:

提取relative 列并用grep 查找包含minutes 的列:

$result = preg_grep('/minutes/', array_column($array['members'], 'relative'));

或过滤器:

$result = array_filter($array['members'],
                       function($v) {
                           return strpos($v['relative'], 'minutes') !== false;
                       });

然后只需获取密钥:

$ids = array_keys($result);

【讨论】:

  • 谢谢,其中一个比另一个快吗?
  • 它似乎不起作用,不知道如何正确解释它,但我相信原因是因为“相对”不是输出而是标题/键/不确定它叫什么,但它成员 -> 每个成员的 id -> 相对数据字段 -> 包含部分:59 分钟前
  • 由于这个原因让它工作,我使用了过滤器: $new = array_filter($idcall_array['members'], function ($var) { return strpos($var['relative'] , '分钟') !== false; });
  • 两个都编辑了,谢谢!
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
相关资源
最近更新 更多