如何从数组中删除值但保持索引不变

时间:2013-12-06 07:40:06

标签: php arrays

我有一个数组:$myarray = array(153=>2 , 154=>0 , 155=>10 , 156=>15 , 157=>8)

我做了:sort($myarray);然后,为了删除最低的那些,我做了array_shift两次,但重新排序索引......但我需要保持索引不变。

所需输出为:$myarray = array(155=>10 , 156=>15 , 157=>8)

数组是动态的,因此索引是未知的。

2 个答案:

答案 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);
}