PHP可以将多维数组元素移动到另一个特定位置?

时间:2012-08-24 03:17:54

标签: php arrays

我试图找出如何将数组元素移动到另一个位置。这可能吗?

这是我的示例var_dump数组:

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

当然,'...'中有值,但只是为了简化它。所以我需要在“排名”之前移动“得分”,所以输出将在排名前首先显示得分,这可能吗?

现在我知道数组push / pop / shift / unshift,但我认为这些都不会对我有所帮助。

请注意,我无法控制这个阵列......我按原样接收它......

基本上它来自一个Wordpress插件,它有一个过滤器用于这些字段,所以我用它来捕捉它。

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

2 个答案:

答案 0 :(得分: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 );

现在你的var_dump $ sample应该在排名前显示得分

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

答案 1 :(得分:0)

我不确定哪个是订单标准,但我想其中一个this functions可以帮到你。特别注意最后三个。您只需要创建适当的比较函数