【发布时间】:2019-05-02 22:10:35
【问题描述】:
我从 mysql 查询中得到一个多维数组。实际上,我正在使用以下正在工作的功能。但是我在里面使用了php的eval()函数。
排序器:
function array_sorter() {
$sortstring = '';
$sortarray = func_get_arg( 0 );
$count = ( func_num_args() - 1 ) / 2;
foreach ( $sortarray as $key => $row ) :
for ( $i = 1; $i <= $count; $i++ ) {
$str ="\$key" . $i . " = \"" . func_get_arg( $i * 2 - 1 ) . "\";";
$str = $str . "\$array" . $i . "[\$key] = \$row[\$key" . $i . "];";
$str = $str . "\$\$key" . $i . " = \$array" . $i . ";";
@eval( $str );
}
endforeach;
for ( $i = 1; $i <= $count; $i++ ) {
$key1 = func_get_arg( $i * 2 - 1 );
$sortstring = $sortstring . "\$" . $key1 . ", " . func_get_arg( $i * 2 ) . ", ";
}
$sortstring = "array_multisort( " . $sortstring . "\$sortarray );";
eval( $sortstring );
return $sortarray;
}
用法:
$this->tabelle = array_sorter( $table, 'Rank', 0 );
数组:
Array
(
[Club] => Club 1
[Number] => 4
[Win] => 4
[Draw] => 0
[Lost] => 0
[Pos_Points] => 8
[Neg_Points] => 0
[Pos_Goals] => 244
[Neg_Goals] => 194
[Diff_Points] => 8
[Diff_Goals] => 50
[Rank] => 1
)
Array
(
[Club] => Club 2
[Number] => 3
[Win] => 2
[Draw] => 1
[Lost] => 0
[Pos_Points] => 5
[Neg_Points] => 1
[Pos_Goals] => 173
[Neg_Goals] => 163
[Diff_Points] => 4
[Diff_Goals] => 10
[Rank] => 2
)
我说函数运行良好,但我不知道使用 eval() 函数的安全性。
有没有办法让它工作而不使用 eval() 来最小化安全风险并使用最佳实践 php 编码标准 (PHP 7)。
提前致谢
【问题讨论】:
-
你的函数应该做什么?
-
我正在使用一个函数,它首先确定所有具有相同点的团队。对于同一点的确定团队,我创建了另一个表。最后,表格按等级排序。这是一个直接比较功能,可以为每支球队输出正确的联赛排名..
-
我们能看到一些示例输入吗?
$table长什么样子? -
我在上述问题中添加了 foreach $table 输出的摘录。
标签: php mysql wordpress security