数组中的PHP空键

时间:2014-02-23 11:18:35

标签: php arrays

在PHP中,是否有一个函数用于查找数组中没有值的最低数字键?我有一个像这样的数组:

array (
    0 => 'nested array',
    1 => 'nested array',
    2 => 'nested array',
    3 => 'nested array',
    6 => 'nested array',
    7 => 'nested array',
)

我想为这个数组添加一个值(在4),不一定是唯一的,并且在不改变其余键的情况下获得它的位置。是循环数组并测试isset()的最简单方法,还是有更简单的方法?

5 个答案:

答案 0 :(得分:4)

您可以尝试以下方法搜索最低密钥:

$arr = array (
    0 => 'nested array',
    1 => 'nested array',
    2 => 'nested array',
    3 => 'nested array',
    6 => 'nested array',
    7 => 'nested array',
);

// get a list of existing keys
$keys = array_keys($arr);

// get the min and max keys
$min = min($keys);
$max = max($keys);

// get the missing keys by:
// * creating a range from the existing min/max
// *diff it from the list of actual keys
$missing = array_diff(range($min, $max), $keys);

// get the min missing key from the diff
echo min($missing);

希望这会有所帮助:)

答案 1 :(得分:2)

  

在PHP中,是否有一个函数用于查找数组中没有值的最低数字键?

没有

  

是循环数组并测试isset()

的最简单方法

循环没问题,但isset()不是最好的选择。如果存在数组键但它包含NULL值,则可能会引发误报。更好的选择是array_key_exists()

在您的情况下,循环可以像简单一样:

for ($key = 0; array_key_exists($key, $arr); $key++);
var_dump($key);
  

还是有更简单的方法吗?

查看建议替代方案的其他答案,这些方案可能会或可能不会更容易

答案 2 :(得分:0)

这有效 -

function find_empty($arr){
    foreach(range(0,max(array_keys($arr))) as $i){
        if(!array_key_exists($i, $arr)){
            return $i;
        }
    }
    return -1;
}

测试 -

$arr = array (
    0 => 'nested array',
    1 => 'nested array',
    2 => 'nested array',
    3 => 'nested array',
    6 => 'nested array',
    7 => 'nested array',
);
var_dump(find_empty($arr));
/**
OUTPUT
int 4
**/

答案 3 :(得分:0)

你可以这样做。我认为它看起来很酷,但我不会这样做,因为它效率不高:

$array = array(0 => 'x', 1 => 'x', 2 => 'x', 4 => 'x', 7 => 'x');

$indexes = array_keys($array); // 0, 1, 2, 4, 7
// sort($array, SORT_NUMERIC);
$all_indexes = range($indexes[0], $indexes[count($indexes)-1]); // 0, 1, 2, 3, 4, 5, 6, 7
$missing_indexes = array_diff($all_indexes, $indexes); // 3, 5, 6
print_r($missing_indexes);

$lowest = reset($missing_indexes);
$highest = end($missing_indexes);
var_dump($lowest, $highest);

如果那是你的话,你可以在更少的行中压缩它。

您现在拥有所有缺失的索引信息:多少,哪个,最低,最高,平均等

答案 4 :(得分:0)

您可以使用range()array_diff以及array_keys获取所有打开密钥的数组:

$array = array (
    0 => 'nested array',
    1 => 'nested array',
    2 => 'nested array',
    3 => 'nested array',
    6 => 'nested array',
    7 => 'nested array',
);

$array_keys = array_keys($array);
sort($array_keys);

$min_key = 0;
$max_key = end($array_keys);

$array_key_range = range($min_key, $max_key);

$open_keys = array_diff($array_key_range , $array_keys);

如果您只想找到一个开放的插槽,则可以将该数组中的第一个值用作最低值,或者任意一个。