从头到尾移动数组的元素



>我有这个多维数组:

$array48= array(
array("2017-06-30-104",1498858541000,39.3322,-122.9027,2.11,0,"U",36)
);

输出:

Array ( 
[0] => Array ( 
[0] => 2017-06-30-104
[1] => 1498858541000 
[2] => 39.3322 
[3] => -122.9027 
[4] => 2.11 
[5] => 0 
[6] => U 
[7] => 36                       
) 
) 

我想把$array48[0][0]移到最后,我这样做:

function id_fine($array_disordinato){
$number= count($array_disordinato);
for($a= 0; $a < $number; $a++){
$element=  $array_disordinato[$a][0];
unset($array_disordinato[$a][0]);
array_push($array_disordinato[$a],$element);
} 
return $array_disordinato;
}
id_fine($array48);

有效,但我不明白为什么输出是:

Array ( 
[0] => Array ( 
[1] => 1498858541000 
[2] => 39.3322 
[3] => -122.9027 
[4] => 2.11 
[5] => 0 
[6] => U 
[7] => 36 
[8] => 2017-06-30-104 
) 
) 

每个元素的位置都是错误的。它应该是:

Array ( 
[0] => Array (                      
[0] => 1498858541000 
[1] => 39.3322 
[2] => -122.9027 
[3] => 2.11 
[4] => 0 
[5] => U 
[6] => 36  
[7] => 2017-06-30-104                     
) 
) 

我建议您使用array_shift将第一个移动到最后一个:

array_push($array48[0], array_shift($array48[0]));

演示

或使用:

$array48[0][]= array_shift($array48[0]);

感谢安德烈亚斯的评论!

单衬将执行您想要的操作:

Array
(
[0] => Array
(
[0] => 1498858541000
[1] => 39.3322
[2] => -122.9027
[3] => 2.11
[4] => 0
[5] => U
[6] => 36
[7] => 2017-06-30-104
)
)

因此,无需复杂的功能id_fineunset然后array_values


来自 DOCS:

array_shift((将数组的第一个值移开并返回它,将数组缩短一个元素并向下移动所有内容。所有数字数组键都将被修改为从零开始计数,而文字键不会被触及。

id_fine函数中,使用array_values重置数组的数组值

$array_disordinato[0] = array_values($array_disordinato[0]);
return $array_disordinato

你得到这个结果是因为你取消设置了位置(unset($array_disordinato[$a][0]);(,因此该位置不再存在;您要做的是使用新结果创建一个全新的数组。

通过使用您拥有的内容,bloiw 代码将向您展示如何解决问题:

$array48= array(
array("2017-06-30-104",1498858541000,39.3322,-122.9027,2.11,0,"U",36)
);
function id_fine($array_disordinato) {
$number = count ($array_disordinato);
for($a= 0; $a < $number; $a++) {
$element = $array_disordinato [$a][0];
unset($array_disordinato[$a][0]);
// HERE: after you unset the array you want to re-order back so it starts from 0
// with this line only you should be fine :)
$array_disordinato[$a] = array_values ($array_disordinato[$a]);
array_push($array_disordinato[$a],$element);
} 
return $array_disordinato;
}
var_dump (id_fine($array48));

unset($array_disordinato[$a][0]);只是删除该值,而不会重新索引数组。它甚至不知道你要求它取消设置的值是在数组中,无论如何它都不会关心,因为关心数组不是它的工作。

array_push($array_disordinato[$a],$element)也不会为数组重新编制索引。它只是找到最大的数字键,递增它并将值存储在那里。

有几种方法可以实现您的目标。其中之一是在对值重新排序后使用array_values()array_values()忽略现有的数组键;它仅获取值并生成从0开始的新索引。

另一种选择是使用array_slice()而不是unset().它从数组中提取一个切片(你需要从索引1直到最后(,默认情况下,它会重新索引它返回的数组。然后,您可以使用array_push()或仅[]将已保存在$element中的值追加:

function id_fine(array $array_disordinato)
{
// Use the array keys to iterate over the array; it is safer
foreach (array_keys($array_disortinato) as $a) {
// Copy the first element to the end
$array_disordinato[$a][] = $array_disordinato[$a][0];
// Ignore the first element
$array_disordinato[$a] = array_slice($array_disordinato[$a], 1);
}
return $array_disordinato;
}

最新更新