[WordPress] ユーザー設定の順序で配列の並べ替え

スポンサーリンク

質問

私は独自の方法で配列をソートする必要があります。現在アレイは設定よう:

array(3) {
  ["appetizer"]=>
  array(1) {
    ["slug"]=>
    string(9) "appetizer"
  }
  ["dessert"]=>
  array(1) {
    ["slug"]=>
    string(7) "dessert"
  }
  ["main"]=>
  array(1) {
    ["slug"]=>
    string(4) "main"
  }

アルファベットから配列の順序を変更する必要があります (その現在の順序) カスタム オーダーに

現在のこれは: アプリ/デザート/メイン。アプリ/メイン/デザートようにします。

しないでください正確にどのように新しいユーザー設定の順序に配列を更新します。

uksort()

を台無しにしたが、本当にあまりにも取得していない指導

ここでは現在の配列とその順序 (アルファベット順) を生成し関数

function sort_dish_terms($term = array()){
    $tax = get_terms( $term ) ;
    $data = array();
    foreach ($tax as $t => $k) {
        // $name = $k->name;
        $slug = $k->slug;   
        $data[$slug] = array(
            'slug'  => $slug
        );  
    }
    return $data;
}

の答え

解決するだろう

これで配列を生成する前に、目的の順序を決定します。次のような何か:

$priorities = [
    'appetizer',
    'main',
    'dessert'
];

/*
 * The $items array is generated by the function you provided.
 */
$items = [
    'appetizer' => [
        'slug' => 'appetizer'
    ],
    'dessert' => [
        'slug' => 'dessert'
    ],
    'main' => [
        'slug' => 'main'
    ]
];

私はし、このような場合に使用できる関数を作成している

function sort_by_priorities(array $priorities, array $items) {

    /*
     * Check if the two arrays are populated.
     */
    if(empty($priority) || empty($items)) {
        throw new LogicException('Parameters $priorities and $items cannot be empty.');
    }

    $sorted = [];

    /*
     * Ensure all array keys are lowercase for better comparison.
     */
    $items = array_change_key_case($items, CASE_LOWER);

    foreach($priorities as $priority) {

        $priority = strtolower($priority);

        if(array_key_exists($priority, $items)) {

            $sorted[$priority] = $items[$priority];

        }

    }

    return $sorted;

}

、関数を呼び出すし、目的の順序を受け取る必要があります

$sorted = sort_by_priorities($priorities, $items);

これは

var_dump()

を使用して、次のような配列を提供します:

array (size=3)
  'appetizer' => 
    array (size=1)
      'slug' => string 'appetizer' (length=9)
  'main' => 
    array (size=1)
      'slug' => string 'main' (length=4)
  'dessert' => 
    array (size=1)
      'slug' => string 'dessert' (length=7)

ご希望の場合に拡張できます。この関数の現在のバージョンは何か可能性がありますまたはあなたに役に立つことができない場合がありますが両方の配列の配列要素の同量がある場合気遣わない

この立てば

答え

これは私の意見は、実際のソートを行う用途のみ 3 ラインではるかにエレガントなソリューション (またはそれであることがご希望の場合)。使用する PHP

uksort

:

<?php

$priorities = array(
    "appetizer" => 1,
    "main"      => 2,
    "dessert"   => 3
);

$array = array(
    "appetizer" => array(
        "slug" => "appetizer"
    ),

    "dessert" => array(
        "slug" => "dessert"
    ),

    "main" => array(
        "slug" => "main"
    )
);

var_dump($array);

uksort($array, function($a, $b) use($priorities) {
    return $priorities[$a] > $priorities[$b];
});

var_dump($array);

?>

になります:

array(3) {
  ["appetizer"]=>
  array(1) {
    ["slug"]=>
    string(9) "appetizer"
  }
  ["dessert"]=>
  array(1) {
    ["slug"]=>
    string(7) "dessert"
  }
  ["main"]=>
  array(1) {
    ["slug"]=>
    string(4) "main"
  }
}
array(3) {
  ["appetizer"]=>
  array(1) {
    ["slug"]=>
    string(9) "appetizer"
  }
  ["main"]=>
  array(1) {
    ["slug"]=>
    string(4) "main"
  }
  ["dessert"]=>
  array(1) {
    ["slug"]=>
    string(7) "dessert"
  }
}

作業例: http://codepad.viper-7.com/OeMLhD

http://stackoverflow.com/questions/28180741/sorting-array-in-custom-order

スポンサーリンク

Leave a Reply