php放值进数组中_将PHP数组中的值移动到数组的开头

12 个答案:

答案 0 :(得分:21)

这对我来说似乎是最简单的方法。您可以将任何位置移动到开头,而不仅仅是最后一个位置(在此示例中,它将蓝色移至开头)。

$colours = array("red", "green", "blue", "yellow");

$movecolour = $colours[2];

unset($colours[2]);

array_unshift($colours, $movecolour);

答案 1 :(得分:13)

可能是最直接的方式

array_unshift( $arr, array_pop( $arr ) );

修改

根据您的评论“如何从数组中取任何一个下标并将其移至开头”,我上面的答案并不能完全满足该请求 - 只有才能通过移动最后一个元素到0指数。

但是,这个功能确实满足了这个要求

/**

* Move array element by index. Only works with zero-based,

* contiguously-indexed arrays

*

* @param array $array

* @param integer $from Use NULL when you want to move the last element

* @param integer $to New index for moved element. Use NULL to push

*

* @throws Exception

*

* @return array Newly re-ordered array

*/

function moveValueByIndex( array $array, $from=null, $to=null )

{

if ( null === $from )

{

$from = count( $array ) - 1;

}

if ( !isset( $array[$from] ) )

{

throw new Exception( "Offset $from does not exist" );

}

if ( array_keys( $array ) != range( 0, count( $array ) - 1 ) )

{

throw new Exception( "Invalid array keys" );

}

$value = $array[$from];

unset( $array[$from] );

if ( null === $to )

{

array_push( $array, $value );

} else {

$tail = array_splice( $array, $to );

array_push( $array, $value );

$array = array_merge( $array, $tail );

}

return $array;

}

并且,在使用中

$arr = array( 'red', 'green', 'blue', 'yellow' );

echo implode( ',', $arr ); // red,green,blue,yellow

// Move 'blue' to the beginning

$arr = moveValueByIndex( $arr, 2, 0 );

echo implode( ',', $arr ); // blue,red,green,yellow

答案 2 :(得分:9)

此函数允许您将元素移动到数组中的任意位置,同时保持数组的其余部分不变:

function array_reorder($array, $oldIndex, $newIndex) {

array_splice(

$array,

$newIndex,

count($array),

array_merge(

array_splice($array, $oldIndex, 1),

array_slice($array, $newIndex, count($array))

)

);

return $array;

}

希望用法非常明显,所以:

$array = array('red','green','blue','yellow',);

var_dump(

array_reorder($array, 3, 0),

array_reorder($array, 0, 3),

array_reorder($array, 1, 3),

array_reorder($array, 2, 0)

);

将输出:

array(4) {

[0]=>

string(6) "yellow"

[1]=>

string(3) "red"

[2]=>

string(5) "green"

[3]=>

string(4) "blue"

}

array(4) {

[0]=>

string(5) "green"

[1]=>

string(4) "blue"

[2]=>

string(6) "yellow"

[3]=>

string(3) "red"

}

array(4) {

[0]=>

string(3) "red"

[1]=>

string(4) "blue"

[2]=>

string(6) "yellow"

[3]=>

string(5) "green"

}

array(4) {

[0]=>

string(4) "blue"

[1]=>

string(3) "red"

[2]=>

string(5) "green"

[3]=>

string(6) "yellow"

}

答案 3 :(得分:4)

您想将其中一个元素移到开头。我们说

$old = array(

'key1' =>'value1',

'key2' =>'value2',

'key3' =>'value3',

'key4' =>'value4');

并且您想将key3移动到beginnig。

$new = array();

$new['key3'] = $old['key3']; // This is the first item of array $new

foreach($old as $key => $value) // This will continue adding $old values but key3

{

if($key != 'key3')$new[$key]=$value;

}

答案 4 :(得分:3)

这与SharpC的答案非常相似,但考虑到你可能不知道数组中的值(它的键)或者它是否设置的事实。如果没有设置颜色或者它已经是数组中的第一个元素,'if'检查将跳过它。

$color = 'yellow';

$color_array = array("red", "green", "blue", "yellow");

$key = array_search($color, $color_array);

if ($key > 0) {

unset($color_array[$key]);

array_unshift($color_array, $color);

}

答案 5 :(得分:2)

EDITED

这是基于问题的更新,并且喜欢Peter Bailey的答案的一般方面。但是,代码对我来说功能/内存密集,所以下面只是简单地交换$ from和$ to值。此方法根本不会调整相关数组的大小,它只是交换到其中的值。

第二次编辑:我在评论中提到了更多的参数检查。

function moveValueByIndex( array $array, $from=null, $to=null )

{

// There is no array, or there are either none or a single entry

if ( null === $array || count($array) < 2 )

{

// Nothing to do, just return what we had

return $array;

}

if ( null === $from )

{

$from = count( $array ) - 1;

}

if ( null === $to )

{

$to = 0;

}

if ( $to == $from )

{

return $array;

}

if ( !array_key_exists($from, $array) )

{

throw new Exception( "Key $from does not exist in supplied array." );

}

$value = $array[$from];

$array[$from] = $array[$to];

$array[$to] = $value;

return $array;

}

请原谅我,如果我应该在对彼得的帖子的评论中加上这个...那就太长了,不能在那里内容:/

答案 6 :(得分:0)

如果你并不总是计划将最后一个对象带到数组的开头,那么这将是最简单的方法......

$array = array('red','green','blue','yellow');

unset($array[array_search($searchValue, $array)]);

array_unshift($array, $searchValue);

答案 7 :(得分:0)

$array = array(

'red',

'green',

'blue',

'yellow',

);

$last = array_pop($array);

array_unshift($array, $last);

答案 8 :(得分:0)

$a = array('red','green', 'blue','yellow');

$b = array_reverse( $a );

如果您的问题是如何让最后一个成为第一个。

答案 9 :(得分:0)

你可以这样做:

$array = array("red", "green", "blue", "yellow");

$last = array_pop($array);

array_unshift($array, $last);

print_r($array);

结果:强>

Array ( [0] => yellow [1] => red [2] => green [3] => blue )

答案 10 :(得分:0)

如果有人仍在寻找答案,这是另一种方式。

$colors = array("red","green","blue","yellow");

$color_to_move = ["yellow"];

$colors_wo_yellow = array_diff($colors, $color_to_move);// This will give an array without "yellow"

//Now add "yellow" as 1st element to $

array_unshift($colors_wo_yellow,$color_to_move[0]);

那就是它。 :)

答案 11 :(得分:0)

PHP:将任何元素移动到第一个或任何位置:

$sourceArray = array(

0 => "red",

1 => "green",

2 => "blue",

3 => "yellow"

);

// set new order

$orderArray = array(

3 => '',

1 => '',

);

$result = array_replace($orderArray, $sourceArray);

print_r($result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值