Rumah > Soal Jawab > teks badan
Adakah mungkin untuk melakukan sesuatu seperti ini dalam PHP? Bagaimanakah anda menulis fungsi? Berikut adalah contoh. Pesanan adalah yang paling penting.
$customer['address'] = '123 fake st'; $customer['name'] = 'Tim'; $customer['dob'] = '12/08/1986'; $customer['dontSortMe'] = 'this value doesnt need to be sorted';
Saya mahu melakukan sesuatu yang serupa
$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));
Kerana pada akhirnya saya menggunakan foreach() dan mereka tidak berada dalam susunan yang betul (kerana saya menambahkan nilai pada rentetan yang perlu dalam susunan yang betul, dan saya tidak tahu semua kekunci tatasusunan/ nilai terlebih dahulu).
Saya melihat fungsi tatasusunan dalaman PHP tetapi nampaknya ia hanya boleh mengisih mengikut abjad atau numerik.
P粉7627302052023-10-16 17:12:15
Beri anda:
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
Hanya gunakan array_merge
或array_replace
。 array_merge
berfungsi dengan bermula dengan tatasusunan yang anda sediakan (dalam susunan yang betul) dan kemudian tulis ganti/tambah kekunci dengan data daripada tatasusunan sebenar:
$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: Saya menjawab soalan "lapuk" ini kerana saya rasa semua gelung yang diberikan oleh jawapan sebelumnya adalah terlalu banyak.