0

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

这是我的示例 var_dump 数组:

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

当然,“...”中有一些值,但只是为了简化它。所以我需要在“rank”之前移动“score”,所以输出会在rank之前先显示score,这可能吗?

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

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

基本上它来自一个 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

我不确定哪个是订单标准,但我想其中一个功能可以帮助您。看看最后三个。您只需要创建适当的比较函数

于 2012-08-24T04:05:24.680 回答