我有这个多维数组:
$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);
有效,但我不明白为什么OUTPUT是:
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
)
)
答案 0 :(得分:5)
我建议您使用array_shift
来移动您的第一个:
array_push($array48[0], array_shift($array48[0]));
或使用:
$array48[0][]= array_shift($array48[0]);
感谢 Andreas 发表评论!
单衬里会做你想做的事:
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()关闭数组的第一个值并返回它,将数组缩短一个元素并将所有内容向下移动。 所有数值数组键都将被修改为从零开始计数 ,而文字键不会被触及。
答案 1 :(得分:2)
在ItemDetailPage.xaml.cs
函数中,使用array_values
id_fine
答案 2 :(得分:1)
您正在获得该结果,因为您取消了位置(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));
答案 3 :(得分:1)
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;
}