PHP函数重新排序数组

时间:2009-08-22 20:06:41

标签: php arrays

以下是来自paypal.com的所有外部JS文件的示例数组:

Array
(
    [src] => Array
        (
            [1] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/lib/min/global.js
            [2] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/tns/mid.js
            [8] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/opinionlab/oo_engine.js
            [11] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/iconix.js
            [12] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pageBlockingUnsafeBrowsers.js
            [13] => https://www.paypalobjects.com/js/tns/min/bid.js
            [15] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pp_naturalsearch.js
            [17] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/site_catalyst/pp_jscode_080706.js
        )

    [size] => Array
        (
            [1] => 0.273
            [2] => 0.266
            [8] => 0.279
            [11] => 0.265
            [12] => 0.285
            [13] => 0.248
            [15] => 0.275
            [17] => 0.289
        )

)

是否有PHP的内置函数,或者可以将此数组重新排序为此的自定义(也没有大的性能影响):

Array
(
    [src] => Array
        (
            [1] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/lib/min/global.js
            [2] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/tns/mid.js
            [3] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/opinionlab/oo_engine.js
            [4] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/iconix.js
            [5] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pageBlockingUnsafeBrowsers.js
            [6] => https://www.paypalobjects.com/js/tns/min/bid.js
            [7] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pp_naturalsearch.js
            [8] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/site_catalyst/pp_jscode_080706.js
        )

    [size] => Array
        (
            [1] => 0.273
            [2] => 0.266
            [3] => 0.279
            [4] => 0.265
            [5] => 0.285
            [6] => 0.248
            [7] => 0.275
            [8] => 0.289
        )

)

5 个答案:

答案 0 :(得分:10)

这个功能应该可以工作,这很简单。

function reindex_array($src) {
    $dest = array();

    foreach ($array as $key => $value) {
        if (is_array($value)) {
           foreach ($value as $dest_val) {
               $dest[$key][] = $dest_val;
           }
        }
    }

    return $dest;
}

使用Henrik's answer

中建议的array_values()
function reindex_array($src) {
    $dest = array();

    foreach ($array as $key => $value) {
        if (is_array($value)) {
           $dest[$key] = array_values($value);
        }
    }

    return $dest;
}

这将使数组索引从0开始。如果您想要基于1的索引,请使用:

function reindex_array($src) {
    $dest = array();

    foreach ($array as $key => $value) {
        if (is_array($value)) {
           $count = 1;

           foreach ($value as $dest_val) {
               $dest[$key][$count] = $dest_val;
               $count++;
           }
        }
    }

    return $dest;
}

答案 1 :(得分:8)

编辑:我最初没有注意到数组嵌套,因此以下内容是不够的。由于Imran已经纳入了我的建议,我不会再进一步​​编辑。


检查array_values()功能,它几乎完全符合您的需要。

你想要的输出的唯一区别是它从零开始重新索引 - 如果你真的需要索引从一开始,你可以先array_shift()一个虚拟条目,然后array_unshift()

答案 2 :(得分:2)

如果你真的希望每个子数组从索引1开始,请使用:

foreach($inputarray as &$a)
    $a = array_combine(range(1,count($a)),$a);

在0索引处开始每个子数组索引使用此...

foreach($inputarray as &$a)
    $a = array_values($a);

PHP参考:
array_combine
range
array_values

答案 3 :(得分:2)

您可以简单地使用array_values功能,它非常易于使用,而且只是一种方法/功能。

// The array
$array = array(0 => "value", 3 => "value", 8 => "value");

// Reorder the array
$array = array_values($array); 

希望这有帮助!

答案 4 :(得分:0)

我最好的一击,暂时(快速且未经考验的尝试)

$i = 1;    
foreach($src as $key=>$item) {
    if ($i != $key) {
        $src[$i] = $src[$key];
        $size[$i] = $size[$key];
        unset($src[$key]];
        unset($size[$key]];
    }
    $i++; 
}

但为什么你需要求助阵列呢?使用foreach ($array as $key=>$value)循环使用它们在此上下文中可以正常工作。