我在 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; });
喵喵时光机
TA贡献1846条经验 获得超7个赞
顺便说一句,您不需要使用array_filter
. 已经有一个函数可以根据模式过滤数组。
$matches = preg_grep("/$searchword/", $example);
但如果您不打算使用单词边界,我同意另一个答案,即您根本不需要使用正则表达式。
- 3 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消