我试图找出如何将数组元素移动到另一个位置。这可能吗?
这是我的示例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
}
答案 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可以帮到你。特别注意最后三个。您只需要创建适当的比较函数