为了账号安全,请及时绑定邮箱和手机立即绑定

函数不会检测数组值中包含的字符串

函数不会检测数组值中包含的字符串

PHP
Helenr 2023-08-19 17:31:03
我在 PHP 中有一小段代码,它根据值是否包含/包含特定值返回某些键值对:Code Runnable number 1这实际上取决于您需要如何准确地修改结果,“将单个 JSON 列转换为多个列”相当模糊,并且可以用各种不同的方式解释。在实体中转换数据是一种选择,但请注意实体应该尽可能愚蠢,理想情况下您应该尽可能将它们保留为普通数据传输对象。如果有其他方法解决问题,通常应该避免在实体本身中进行更大的“变革”操作。修改结果的集中方法是查询对象的结果格式化程序,它们可以轻松附加到Model.beforeFind事件/处理程序中,以便将它们应用于特定表的所有查询,甚至应用于所有表。afterFind这几乎就是您在 CakePHP 2.x 中要做的事情。结果格式化程序还有一个优点,即当您使用禁用水合作用的查询(即返回数组而不是实体的查询)时,它们将为您提供正确的数据。一个快速而肮脏的例子:public function beforeFind(\Cake\Event\EventInterface $event, \Cake\ORM\Query $query): \Cake\ORM\Query{    return $query->formatResults(function (\Cake\Collection\CollectionInterface $results) {        return $results->map(function ($row) {            // $row is the entity (or array when hydration is disabled) in the result set                        $row['new_field'] = 1234;            return $row;        });    });}
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

在这种情况下,正则表达式是多余的,您可以使用strpos

$matches = array_filter($example, function($var) use ($searchword) { return strpos($var,$searchword) !== FALSE; });


查看完整回答
反对 回复 2023-08-19
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

顺便说一句,您不需要使用array_filter. 已经有一个函数可以根据模式过滤数组。

$matches = preg_grep("/$searchword/", $example);

但如果您不打算使用单词边界,我同意另一个答案,即您根本不需要使用正则表达式。


查看完整回答
反对 回复 2023-08-19
?
杨魅力

TA贡献1811条经验 获得超6个赞

只需从正则表达式中删除单词边界即可\b

return preg_match("/$searchword/i")


查看完整回答
反对 回复 2023-08-19
  • 3 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信