在PHP中,是否有一个函数用于查找数组中没有值的最低数字键?我有一个像这样的数组:
array (
0 => 'nested array',
1 => 'nested array',
2 => 'nested array',
3 => 'nested array',
6 => 'nested array',
7 => 'nested array',
)
我想为这个数组添加一个值(在4
),不一定是唯一的,并且在不改变其余键的情况下获得它的位置。是循环数组并测试isset()
的最简单方法,还是有更简单的方法?
答案 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);
如果您只想找到一个开放的插槽,则可以将该数组中的第一个值用作最低值,或者任意一个。