【问题标题】:Only retain array rows which contain a specified value at a specified key仅保留在指定键处包含指定值的数组行
【发布时间】:2020-07-12 15:52:55
【问题描述】:

我有这个功能:

function filter($array, $like, $kol) {
    $filtered = array_filter($array, function ($item) use ($kol, $like) {
        return stripos($item[$kol], $like) !== false;
    });
    
    return array_values($filtered);
}

如何修改它以仅返回 $like 的精确值?现在它搜索“like $like”。

【问题讨论】:

  • 你的意思是return $item[$kol] === $like
  • 我想搜索 YYY 而不是 %YYY%。 YYY 只是一个例子。
  • 您是否尝试将字符串与=== 进行比较?
  • 你能用 === 显示代码吗?
  • 可能是这样的3v4l.org/gEI5r

标签: php arrays filter exact-match


【解决方案1】:

使用stripos 将:

找到第一次出现 needle 的数字位置 干草堆字符串。

如果你想检查 $item[$kol] 的值是否等于$like 你可以比较字符串

return $item[$kol] === $like

在对数组进行索引时,可以先检查键是否存在。

例如

function filter($array, $like, $kol) {
    $filtered = array_filter($array, function ($item) use ($kol, $like) {
        if (array_key_exists($kol, $item)) {
            return $item[$kol] === $like;
        }
        return false;
    });

    return array_values($filtered);
}

Php demo

【讨论】:

    【解决方案2】:

    您的任务是询问如何创建一个索引数组,其中符合条件的行必须在指定键处包含指定值。

    function filter($array, $value, $key) {
        return array_values(
                   array_filter(
                       $array,
                       fn($row) => array_key_exists($key, $row) && $row[$key] === $value
                   )
               );
    }
    

    array_filter() 调用返回 true(保留行)如果键存在并且该键的值完全匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      相关资源
      最近更新 更多