在 PHP 中可以做這樣的事情嗎?你會(huì)如何寫(xiě)一個(gè)函數(shù)?這是一個(gè)例子。順序是最重要的。
$customer['address'] = '123 fake st'; $customer['name'] = 'Tim'; $customer['dob'] = '12/08/1986'; $customer['dontSortMe'] = 'this value doesnt need to be sorted';
我想做一些類(lèi)似的事情
$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));
因?yàn)樽钺嵛沂褂昧?foreach() 並且它們的順序不正確(因?yàn)槲覍⒅蹈郊拥叫枰凑_順序的字串中,並且我事先不知道所有的數(shù)組鍵/值)。
我查看了 PHP 的內(nèi)部陣列函數(shù),但似乎只能按字母或數(shù)字排序。
給你:
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; }
只需使用array_merge
或array_replace
。 array_merge
的工作原理是從您提供的數(shù)組開(kāi)始(按正確的順序),然後使用實(shí)際數(shù)組中的資料覆蓋/添加鍵:
$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:我正在回答這個(gè)「過(guò)時(shí)」的問(wèn)題,因?yàn)槲艺J(rèn)為以前的答案給出的所有循環(huán)都太過(guò)分了。