移位数组 - PHP

时间:2013-11-01 13:31:24

标签: php

我正在开发一个我的项目,并且有一个基于硬件的组件,它可以回收我收集的数据并通过该数组创建。一个功能是比较一个阵列和另一个阵列中的数据。我遇到的一件事很麻烦,因为它似乎总是在数组的2索引中放置一个值,因为它是如何循环的。我的问题是,该数组中的值0 and 1没有任何内容。它们被抵消了。我怎样才能将索引2中的值移动到数组的索引0,或者以更动态的方式移动;把它放在第一个可用的插槽中。

我们很感激思考和建议。

编辑:

Array ( [2] => 0x0000000000000000004004490529 ) - 使用print_r()

输出

更新:

这是迭代数组时的输出:

Notice: Undefined offset: 0 in daemon.php on line 259

Notice: Undefined offset: 1 in daemon.php on line 259

2 个答案:

答案 0 :(得分:2)

$array = array_merge($array);

这将从0

重新索引数组
$array = array(2 => 'foo'); // your starting point
$array = array_merge($array);
var_dump($array);
// array(1) { [0]=> string(3) "foo" }

或者,如果您只有一个键并且它始终位于索引2中,您也可以通过简单的方式执行此操作:

$array = array(2 => 'foo'); // your starting point
$array[0] = $array[2];
unset($array[2]);

答案 1 :(得分:2)

您可以使用array_values重置所有密钥:

$array = array_values($array);

示例:

<?php
    $array = array(
        0 => 'baz',
        2 => 'foo',
        4 => 'bar'
    );

    $array = array_values($array);

    print_r($array);
    /*
        Array
        (
            [0] => baz
            [1] => foo
            [2] => bar
        )
    */
?>

DEMO

基本上array_values做什么(如果要用PHP重新编码)是这样的:

function array_values($array) {
    $return = array();

    foreach ($array as $value) {
        $return[] = $value;
    }

    return $return;
}