首頁  >  問答  >  主體

自訂鍵對基於另一個陣列的平面關聯進行排序

在 PHP 中可以做這樣的事情嗎?你會如何寫一個函數?這是一個例子。順序是最重要的。

$customer['address'] = '123 fake st';
$customer['name'] = 'Tim';
$customer['dob'] = '12/08/1986';
$customer['dontSortMe'] = 'this value doesnt need to be sorted';

我想做一些類似的事情

$properOrderedArray = sortArrayByArray($customer, array('name', 'dob', 'address'));

因為最後我使用了 foreach() 並且它們的順序不正確(因為我將值附加到需要按正確順序的字串中,並且我事先不知道所有的數組鍵/值)。

我查看了 PHP 的內部陣列函數,但似乎只能按字母或數字排序。

P粉541551230P粉541551230340 天前586

全部回覆(2)我來回復

  • P粉762730205

    P粉7627302052023-10-16 17:12:15

    給你:

    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;
    }

    回覆
    0
  • P粉277824378

    P粉2778243782023-10-16 00:38:57

    只需使用array_mergearray_replacearray_merge 的工作原理是從您提供的數組開始(按正確的順序),然後使用實際數組中的資料覆蓋/添加鍵:

    $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:我正在回答這個「過時」的問題,因為我認為以前的答案給出的所有循環都太過分了。

    回覆
    0
  • 取消回覆