Как найти значение в массиве и удалить его с помощью функции PHP-массив
Как найти значение в массиве и как его удалить. Если какой-либо php встроенный массив функций для этого. После удаления мне нужен последовательный порядок индексов. любой знает, пожалуйста, помогите мне.
9 ответов
для поиска элемента в массиве можно использовать array_search
функция и для удаления элемента из массива вы можете использовать
<?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
возвращает 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
)
и это хорошо!
Это решение представляет собой комбинацию решения @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-массив удалить по значению (не ключ)
прежде всего, как уже упоминалось, вы будете использовать "array_search () "& the"unset ()" methodsas показано ниже:
<?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);