是否可以在PHP中使用array_shift()并获取密钥?

时间:2010-03-08 00:49:16

标签: php sorting arrays

我有一个数组中的文件列表,其中文件名是键,值是最后修改日期(以秒为单位)。它们从最旧到最新排序。

文件为glob(),然后使用

以这种方式排序
asort($fileNameToLastModified, SORT_NUMERIC);

我使用array_shift()来获取最旧的文件。不幸的是,它似乎给了我价值,而且似乎没有办法获得钥匙。

这样做的唯一方法是这样吗?

$keys = array_keys($fileNameToLastModified);

$oldest = array_shift($keys);
array_shift($fileNameToLastModified); // to manually chop the first array member off too.

......还是有内置方法可以做到这一点?

6 个答案:

答案 0 :(得分:15)

$result = array_splice( $yourArray, 0, 1 );

......应该做的伎俩。请参阅array_splice

答案 1 :(得分:4)

您可以使用each之类的:

$b = array(1=>2, 3=>4, 7=>3);
while(1) {
    list($key,$value) = each($b);
    if (empty($key))
        break;
    echo "$key $val\n";
}

使用each迭代数组将保持其最后位置。

答案 2 :(得分:3)

不同的方法:

list ($key, $value) = each($srcData); array_shift($srcData);

...(如果您不需要list($key)...,则只需$value)。请参阅eachlist

编辑:正如@ztate在评论中指出的那样,each()函数已被弃用,因此依赖此方法不再是一个好主意。

但我认为通过使用新的key()函数(未经测试)方式可以解决类似行为:

$key = key($srcData); $selected = array_shift($srcData);

答案 3 :(得分:0)

你也可以这样做:

<?php

$arr = array('a' => 'first', 'b' => 'second');

// This is your key,value shift line
foreach($arr as $k => $v) { break; }

echo "Key: $k\nValue: $k";

这将输出:

Key: a
Value: first

我不确定性能如何,所以你可能想要进行一些分析,但对于大型数组,它可能比array_keys()快,因为它不需要迭代整个事物

答案 4 :(得分:0)

您可以查看key()current()each()。他们做你要求的。

我不确定你是否打算事后从数组中获得更多的键/值对。因此,我不会详细介绍您可能需要做的其他事情。

答案 5 :(得分:0)

另一种短暂工作的可能性:

foreach ($array as $key => $value) break;
unset($array[$key]);