我在 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 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消