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

我在 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;

        });

    });

}


Helenr
浏览 108回答 3
3回答

达令说

在这种情况下,正则表达式是多余的,您可以使用strpos:$matches = array_filter($example, function($var) use ($searchword) { return strpos($var,$searchword) !== FALSE; });

喵喵时光机

顺便说一句,您不需要使用array_filter. 已经有一个函数可以根据模式过滤数组。$matches = preg_grep("/$searchword/", $example);但如果您不打算使用单词边界,我同意另一个答案,即您根本不需要使用正则表达式。

杨魅力

只需从正则表达式中删除单词边界即可\b:return preg_match("/$searchword/i")
打开App,查看更多内容
随时随地看视频慕课网APP