Hoi,

Ik ben mijn website aan het aanpassen voor php 8.* maar nu kom ik een functie tegen die niet meer werkt.
Kan iemand mij helpen om de functie weer werkend te krijgen.

<?php
function sortBy($field, &$array, $direction = 'asc')
{
usort($array, create_function('$a, $b', '
$a = $a["' . $field . '"];
$b = $b["' . $field . '"];

if ($a == $b) { return 0; }

return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1;
'));

return true;
}
?>
Heb je al gekeken op https://www.php.net/create_function naar het tweede codeblok met de anonymous-notatie?

Wel grappig, ik heb het bestaan van create_function() nog nooit eerder gekend. Maar goed, ik heb eval() dan ook altijd gemeden, wat er in deze functie gebruikt wordt, omdat het een evil functie was. De naam zegt het eigenlijk grotendeels al.
Ja heb ik al gekeken, maar begrijp niet wat ik aan moet passen.

function($a,$b) { return "Hier je code die uitgevoerd moet worden!" ; }


In die twee minuten had je natuurlijk wel wat kunnen proberen, hé? ;-)
Voordat ik het bericht plaatste had ik al gekeken ;-)

Begrijp nu ook alleen niet wat ik precies moet aanpassen.
Je moet tussen de accolades van de anonymous functie je code plaatsen, zoals je die normaal in het tweede argument van create_function gebruikt.
Heb ik geprobeerd maar dan krijg ik een foutmelding op de eerste return

<?php
function sortBy($field, &$array, $direction = 'asc')
{
usort($array,

function ($a,$b) {

$a = $a["' . $field . '"];
$b = $b["' . $field . '"];

if ($a == $b) { return 0; }
}
);

return ($a . ($direction == 'desc' ? '>' : '<') . $b) ? -1 : 1;
}
?>
Vertel....
dreamweaver geeft deze melding: syntax error, unexpected quoted-string (T_CONSTANT_ENCAPSED_STRING)
Kijk goed naar de kleurtjes, dan zie je dat er op regel 15 iets verkeerd gaat.

Die tweede return heeft overigens geen nut. Bij de eerste return wordt de functie reeds verlaten.
Ik krijg deze melding:

Parse error: syntax error, unexpected single-quoted string " . ($direction == "

als ik de single-quotes weghaal geeft die een foutmelding op de field dat die niet bestaat?
Begrijp ook niet wat ik fout doe.

Ik heb het stukje code hierboven aangepast.

[size=xsmall]Toevoeging op 21/04/2022 15:52:14:[/size]

Ik heb het anders opgelost, zonder de functie:

<?php
array_multisort(array_map(function($element) {
return $element['prijs'];
}, $array), SORT_ASC, $array);
?>

Dank iedereen voor het meedenken.

Reageren