I'm getting a multi-dimensional array from a mysql query. Acually I'm using the following function which is working. But I use the php eval() function inside.
SORTER:
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;
}
USAGE:
$this->tabelle = array_sorter( $table, 'Rank', 0 );
ARRAY:
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
)
It's I said the function is working well but I don't know about the security by using the eval() function.
Is there a way to to get it working without using the eval() to minify the security risk and using best practise php coding standards (PHP 7).
Thanks in advance