我有一个数组:$myarray = array(153=>2 , 154=>0 , 155=>10 , 156=>15 , 157=>8)
我做了:sort($myarray);
然后,为了删除最低的那些,我做了array_shift
两次,但重新排序索引......但我需要保持索引不变。
所需输出为:$myarray = array(155=>10 , 156=>15 , 157=>8)
数组是动态的,因此索引是未知的。
答案 0 :(得分:5)
第一个:你的错误从使用sort()
开始 - 它会重置密钥。请改用asort()
。接下来,使用array_slice()
和第四个参数true
来保存密钥:
$myarray = array(153=>2 , 154=>0 , 155=>10 , 156=>15 , 157=>8);
asort($myarray);
$myarray = array_slice($myarray, 2, null, true);
答案 1 :(得分:2)
如果您知道要删除的索引,则可以执行以下操作:
unset($myarray['first_index_here']);
[... unset more indexes ...]
另见文档:http://www.php.net/manual/en/language.references.unset.php
如果你想删除价值最小的那个,按照@Leri的建议,你可以尝试:
unset($myarray[array_search(min($myarray), $myarray)]);
你也可以把它变成一个函数,然后多次使用它:
function unset_min(&$array) {
unset($array[array_search(min($array), $array)]);
}
$myarray = array(153=>2 , 154=>0 , 155=>10 , 156=>15 , 157=>8);
// by hand
unset_min($myarray); // removed key 154
unset_min($myarray); // removed key 153
// or with loops
for($i = 0; $i < 2; ++$i) { // replace "2" with the actual number of entries to remove
unset_min($myarray);
}