Как найти значение в массиве и удалить его с помощью функций массива PHP

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

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

 <?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); ?> не <?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 для получения дополнительных функций, связанных с массивом.

 <?php $my_array = array('sheldon', 'leonard', 'howard', 'penny'); $to_remove = array('howard'); $result = array_diff($my_array, $to_remove); ?> 

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

После выполнения используйте функцию unset ()

 <?php $array = array( 'apple', 'orange', 'pear' ); unset( $array[array_search( 'orange', $array )] ); ?> 

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

 <?php $haystack = Array('one', 'two', 'three'); if (($key = array_search('four', $haystack)) !== FALSE) { unset($haystack[$key]); } var_dump($haystack); с <?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 ) 

И это хорошо!

Это решение представляет собой комбинацию решения @ 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; } с /** * @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 удаляет значение (не ключ)

Прежде всего, как упоминалось выше, вы будете использовать методы « 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. ?> 

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

Одна функция, о которой не упоминалось, – 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); 

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

 $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]); } 

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

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