0

配列要素を別の場所に移動する方法を見つけようとしています。これは可能ですか?

これが私の例であるvar_dump配列です。

array
     'person' =>
       array
            'first_name' =>
              array
                   '...'
            'last_name' =>
              array
                   '...'
            'rank' =>
              array
                   '...'
            'score' =>
              array
                   '...'
            'item' =>
              array
                   '...'
     'work' =>
       array
            'company' =>
              array
                   '...'
            'phone' =>
              array
                   '...'

そしてもちろん、「...」には値がありますが、それを単純化するためです。だから私は「ランク」の前に「スコア」を移動する必要があるので、出力はランクの前に最初にスコアを表示します、それは可能ですか?

今、私は配列のプッシュ/ポップ/シフト/アンシフトを知っていますが、それらのどれも私がここで私を助けることはないと思います。

注意してください、私はこのアレイを制御できません...私はそれをそのまま受け取っています...

基本的にはWordpressプラグインからのものであり、これらのフィールド用のフィルターがあるので、これを使用してキャッチします。

add_filters( 'work_rank_fields', 'custom_order');
function custom_order($fields) {
 var_dump($fields); //what you see on top
}
4

2 に答える 2

1

あなたが私たちにくれたようなサンプル配列を使用して、このようなことを試すことができます.

$sample = array(
  'person' => array(
    'first_name' => array('first'),
    'last_name' => array('last'),
    'rank' => array('rank'),
    'score' => array('score'),
    'item' => array('item')
    ),
  'work' => array(
    'company' => array('company'),
    'phone' => array('phone')
    )
  );

function reorder_person( $sample )
{
  extract( $sample['person'] );
  // the desired order below for the keys
  $sample['person'] = compact('first_name','last_name','score','rank','item');
  return $sample;
}

$sample = reorder_person( $sample );

これで、$sample の var_dump はランクの前にスコアを表示するはずです

array(2) {
  'person' =>
  array(5) {
    'first_name' =>
    array(1) {
      [0] =>
      string(5) "first"
    }
    'last_name' =>
    array(1) {
      [0] =>
      string(4) "last"
    }
    'score' =>
    array(1) {
      [0] =>
      string(5) "score"
    }
    'rank' =>
    array(1) {
      [0] =>
      string(4) "rank"
    }
    'item' =>
    array(1) {
      [0] =>
      string(4) "item"
    }
  }
  'work' =>
  array(2) {
    'company' =>
    array(1) {
      [0] =>
      string(7) "company"
    }
    'phone' =>
    array(1) {
      [0] =>
      string(5) "phone"
    }
  }
}

少し不器用ですが、wordpress フィルターの custom_order 関数は次のようになります。

function custom_order( $fields ) {

  $a = array();
  foreach( $fields['person'] as $key => $value )
  {
    if ( $key == 'rank' ) continue; // wait until we get score first

    if ( $key == 'score' )
    {
      $a['score'] = $value; // add score first, then rank
      $a['rank']  = $fields['person']['rank'];
      continue;
    }

    $a[$key] = $value;
  }

  $fields['person'] = $a;

  return $fields;
}
于 2012-08-24T03:36:44.910 に答える
0

どちらが注文基準かはわかりませんが、この機能のいずれかが役立つと思います。特に最後の 3 つを見てください。適切な比較関数を作成するだけです

于 2012-08-24T04:05:24.680 に答える