>我有这个多维数组:
$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_fine
unset
然后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;
}