【发布时间】:2021-03-16 13:51:19
【问题描述】:
我有一个用户表,我已经加密并存储在 MySQL 数据库中。
当拉出数据并通过选择输入控件将其添加到表单时,我希望能够按字母顺序对项目进行排序。
我正在对 foreach 循环的每次迭代中的项目进行解密。
<?php foreach ($data['crewData'] as $crew) : ?>
<option value="<?php echo $inputCrew; ?>">
<?php echo decryptData($crew->user_firstName).' '.decryptData($crew->user_lastName); ?>
</option>
<?php endforeach; ?>
我知道我可以使用sort($variable); 对数组进行排序,但是$data['crewData'] 返回的数据是标准对象,如下面的 sn-p 所示...
array(38) {
[0]=>
object(stdClass)#18 (21) {
["user_id"]=>
string(2) "20"
["user_firstName"]=>
string(59) "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
我想按 user_firstName 字段排序。对于如何做到这一点,我唯一的想法是运行一个 foreach 循环解密数据,创建一个临时的非加密对象,然后将其呈现给选择。
到目前为止,我只有大约 50 个用户,所以开销并不算太糟糕,但是随着用户数量的增加,我可以看到这很痛苦??
走上面的路线这行得通吗?
$crewData = $this->userModel->getUserByType('Crew');
$array = [];
foreach ($crewData as $item) {
$firstName = decryptData($item->user_firstName) //decryptData() is my decryption function
array_push($array, $firstName );
}
$arraySorted = sort($array);
【问题讨论】:
-
在运行时解密每个单独的属性似乎有点尴尬。你能不能在你的表上创建一个视图来解密然后从视图中选择?
-
或者将你的解密逻辑上移到你的模型中,这样当你得到一个模型数组时,它们已经被解密了。
-
To go the above route will this work?- 是的,这可行,但随着应用程序的增长,您可能会后悔走这条路。对表格的每次更改都会在 PHP(视图、控制器、模型等)中产生 n 个更改
标签: php