Как найти значение в массиве и удалить его с помощью функций массива PHP - PullRequest
49 голосов
/ 17 июня 2010

Как найти значение в массиве и как его удалить. Если какой-либо встроенный массив PHP функции для этого. После удаления мне нужен порядок последовательного индекса. любое тело знает, пожалуйста, помогите мне.

Ответы [ 9 ]

88 голосов
/ 17 июня 2010

Для поиска элемента в массиве вы можете использовать функцию array_search, а для удаления элемента из массива вы можете использовать функцию unset. Пример:

<?php
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page');

print_r($hackers);

// Search
$pos = array_search('Linus Trovalds', $hackers);

echo 'Linus Trovalds found at: ' . $pos;

// Remove from array
unset($hackers[$pos]);

print_r($hackers);
?>

Вы можете обратиться к: http://www.php.net/manual/en/ref.array.php для получения дополнительных функций, связанных с массивом.

86 голосов
/ 11 сентября 2013
<?php
$my_array = array('sheldon', 'leonard', 'howard', 'penny');
$to_remove = array('howard');
$result = array_diff($my_array, $to_remove);
?>
12 голосов
/ 17 июня 2010

Сначала нужно найти ключ массива, это можно сделать с помощью array_search ()

После этого используйте unset ()

<?php
$array = array( 'apple', 'orange', 'pear' );

unset( $array[array_search( 'orange', $array )] );
?>
8 голосов
/ 06 июля 2012

На всякий случай, если вы хотите использовать любой из упомянутых кодов, имейте в виду, что array_search возвращает FALSE, когда «игла» не найдена в «стоге сена», и, следовательно, в этих примерах будет отменен первый (индексированный нулями) элемент. Используйте это вместо:

<?php
$haystack = Array('one', 'two', 'three');
if (($key = array_search('four', $haystack)) !== FALSE) {
  unset($haystack[$key]);
}
var_dump($haystack);

Приведенный выше пример выдаст:

Array
(
    [0] => one
    [1] => two
    [2] => three
)

И это хорошо!

4 голосов
/ 06 января 2017

Одна функция, которая не была упомянута, - array_filter.Вам просто нужно передать функцию обратного вызова, которая принимает каждый элемент в качестве аргумента и возвращает true или false, если этот элемент должен остаться или быть удален.Это также имеет преимущество в удалении повторяющихся значений.

Вы можете использовать это так:

$myArray = array('one', 'two', 'deleteme', 'three');
$output = array_filter($myArray, function($val) { return $val != 'deleteme'; });

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

$output = array_values($output);
4 голосов
/ 08 сентября 2014

Это решение представляет собой комбинацию решения @ Peter для удаления нескольких вхождений и решения @chyno для удаления первого вхождения. Это то, что я использую.

/**
 * @param array $haystack
 * @param mixed $value
 * @param bool $only_first
 * @return array
 */
function array_remove_values(array $haystack, $needle = null, $only_first = false)
{
    if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); }
    if (empty($haystack)) { return $haystack; }

    if ($only_first) { // remove the first found value
        if (($pos = array_search($needle, $haystack)) !== false) {
            unset($haystack[$pos]);
        }
    } else { // remove all occurences of 'needle'
        $haystack = array_diff($haystack, array($needle));
    }

    return $haystack;
}

Также посмотрите здесь: PHP массив удалить по значению (не ключу)

1 голос
/ 08 июля 2010

Прежде всего, как уже упоминалось, вы будете использовать методы " array_search () " и " unset () ", как показано ниже: -

<?php
$arrayDummy = array( 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg' );
unset( $arrayDummy[array_search( 'dddd', $arrayDummy )] ); // Index 3 is getting unset here.
print_r( $arrayDummy ); // This will show the indexes as 0, 1, 2, 4, 5, 6.
?>

Теперь, чтобы переиндексировать тот же массив, без сортировки значений массива, вам нужно будет использовать метод " array_values ​​() ", как показано ниже: -

<?php
$arrayDummy = array_values( $arrayDummy );
print_r( $arrayDummy ); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5.
?>

Надеюсь, это поможет.

0 голосов
/ 12 марта 2017

Вот как бы я это сделал:

$terms = array('BMW', 'Audi', 'Porsche', 'Honda');
// -- purge 'make' Porsche from terms --
if (!empty($terms)) {
    $pos = '';
    $pos = array_search('Porsche', $terms);
    if ($pos !== false) unset($terms[$pos]);
}
0 голосов
/ 07 апреля 2014

Чтобы найти и удалить несколько экземпляров значения в массиве, я использовал следующий код

$list = array(1,3,4,1,3,1,5,8);

$new_arr=array();

foreach($list as $value){

    if($value=='1')
    {
        continue;
    }
    else
    {
        $new_arr[]=$value;
    }     
}


print_r($new_arr);
...