suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Benutzerdefinierter Schlüssel zum Sortieren flacher Zuordnungen basierend auf einem anderen Array

Ist es möglich, so etwas in PHP zu machen? Wie würden Sie eine Funktion schreiben? Hier ist ein Beispiel. Ordnung ist das Wichtigste.

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

Ich möchte etwas Ähnliches tun

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

Weil ich am Ende foreach() verwendet habe und sie nicht in der richtigen Reihenfolge waren (weil ich die Werte an eine Zeichenfolge angehängt habe, die in der richtigen Reihenfolge sein musste, und ich nicht alle Array-Schlüssel kannte/ Werte vorher angeben).

Ich habe mir die internen Array-Funktionen von PHP angesehen, aber es scheint, dass sie nur alphabetisch oder numerisch sortieren können.

P粉541551230P粉541551230426 Tage vor666

Antworte allen(2)Ich werde antworten

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

    Antwort
    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:我正在回答这个“过时”的问题,因为我认为以前的答案给出的所有循环都太过分了。

    Antwort
    0
  • StornierenAntwort