Maison > Questions et réponses > le corps du texte
Est-il possible de faire quelque chose comme ça en PHP ? Comment écririez-vous une fonction ? Voici un exemple. L’ordre est le plus important.
$customer['address'] = '123 fake st'; $customer['name'] = 'Tim'; $customer['dob'] = '12/08/1986'; $customer['dontSortMe'] = 'this value doesnt need to be sorted';
Je veux faire quelque chose de similaire
$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));
Parce qu'à la fin j'ai utilisé foreach() et qu'elles n'étaient pas dans le bon ordre (parce que j'ajoutais les valeurs à une chaîne qui devait être dans le bon ordre, et je ne connaissais pas toutes les clés du tableau/ valeurs au préalable).
J'ai regardé les fonctions de tableau internes de PHP mais il semble qu'elles ne puissent trier que par ordre alphabétique ou numérique.
P粉7627302052023-10-16 17:12:15
Je vous donne :
function sortArrayByArray(array $array, array $orderArray) { $ordered = array(); foreach ($orderArray as $key) { if (array_key_exists($key, $array)) { $ordered[$key] = $array[$key]; unset($array[$key]); } } return $ordered + $array; }
P粉2778243782023-10-16 00:38:57
Utilisez simplement array_merge
或array_replace
。 array_merge
fonctionne en commençant par le tableau que vous fournissez (dans le bon ordre), puis en écrasant/ajoutant les clés avec les données du tableau réel :
$customer['address'] = '123 fake st'; $customer['name'] = 'Tim'; $customer['dob'] = '12/08/1986'; $customer['dontSortMe'] = 'this value doesnt need to be sorted'; $properOrderedArray = array_merge(array_flip(array('name', 'dob', 'address')), $customer); // or $properOrderedArray = array_replace(array_flip(array('name', 'dob', 'address')), $customer); // $properOrderedArray: array( // 'name' => 'Tim', // 'dob' => '12/08/1986', // 'address' => '123 fake st', // 'dontSortMe' => 'this value doesnt need to be sorted')
PS : je réponds à cette question "obsolète" car je pense que toutes les boucles données par les réponses précédentes sont de trop.