Is it possible in PHP to do something like this? How would you go about writing a function? Here is an example. The order is the most important thing.
$customer['address'] = '123 fake st';
$customer['name'] = 'Tim';
$customer['dob'] = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';
And I'd like to do something like
$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));
Because at the end I use a foreach() and they're not in the right order (because I append the values to a string which needs to be in the correct order and I don't know in advance all of the array keys/values).
I've looked through PHP's internal array functions but it seems you can only sort alphabetically or numerically. Would I have to implement some sort of sorting function with array_walk?
Thank you in advance!
From stackoverflow
-
There you go:
function sortArrayByArray($array,$orderArray) { $ordered = array(); foreach($orderArray as $key) { if(array_key_exists($key,$array)) { $ordered[$key] = $array[$key]; unset($array[$key]); } } return $ordered + $array; }
alex : Thank you very much!Eran Galperin : You're very welcome :)alex : So you can join 2 arrays with a + sign? I never knew that, I've been using `array_merge()`!grantwparks : Is this better than using `usort()` or `uasort()`?Neil Aitken : Excellent function, Thanks Eran. -
function sortArrayByArray(array $toSort, array $sortByValuesAsKeys) { $commonKeysInOrder = array_intersect_key(array_flip($sortByValuesAsKeys), $toSort); $commonKeysWithValue = array_intersect_key($toSort, $commonKeysInOrder); $sorted = array_merge($commonKeysInOrder, $commonKeysWithValue); return $sorted; }
alex : I didn't know you could cast function arguments like that in PHP!OIS : Arrays and classes only. -
IF you have array in your array, you'll have to adapt the function by Eran a little bit...
function sortArrayByArray($array,$orderArray) { $ordered = array(); foreach($orderArray as $key => $value) { if(array_key_exists($key,$array)) { $ordered[$key] = $array[$key]; unset($array[$key]); } } return $ordered + $array; }
0 comments:
Post a Comment