2013-12-06 2 views
2

У меня есть массив: $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

'снята с охраны ($ MyArray [array_search (мин ($ MyArray), $ MyArray)]);' – Leri

ответ

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); 
2

Если вы знаете, индексы, которые вы хотите удалить, вы можете просто сделать:

unset($myarray['first_index_here']); 
[... unset more indexes ...] 

см также документы: http://www.php.net/manual/en/language.references.unset.php

Если вы хотите удалить один с наименьшим значением, в соответствии с @ Лери предложение, вы можете попробовать:

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); 
} 
+0

индексы неизвестны, как массив является динамическим – sqlchild

+0

затем попробуйте второй вариант и дайте мне знать :) –

+0

сэр, варианты секунд работают без проблем :), спасибо – sqlchild

Смежные вопросы