#php #arrays #unset
#php #массивы #сбросить значение
Вопрос:
Я пытаюсь найти способ отменить установку элемента, если первым символом является определенная буква, в данном случае буква D… Я не уверен, существует ли функция массива для выполнения чего-либо подобного или замена preg поможет?
[0] => Aaron [1] => Bob [2] => Carl [3] => Dale [4] => Devin [5] => Dylan
Отмена установки всех слов, начинающихся с буквы «D», приведет к:
[0] => Aaron [1] => Bob [2] => Carl
Комментарии:
1. Какую версию PHP вы используете?
2. Круто, тогда можно использовать замыкания
Ответ №1:
Ручной цикл уже выполняет задачу. Но как однострочный вариант:
$array = preg_grep('/^(?!D)/', $array);
Ответ №2:
Вы могли бы использовать функцию array_filter:
function filter_firstchar($var){
return $var[0] != 'D';
}
$result = array_filter($arr, 'filter_firstchar');
Если буква, по которой вы собираетесь фильтровать, изменится, вы можете создать действительно базовый класс фильтрации:
class Filter_FirstChar {
private $char;
function __construct($char){
$this->char = $char;
}
function filter($var){
return $var[0] != $this->char;
}
}
$result = array_filter($arr, array(new Filter_FirstChar('A'), 'filter'));
Комментарии:
1. Вам нужно использовать
!=
«Если функция обратного вызова возвращает значение true, текущее значение из входных данных возвращается в результирующий массив»2. @GWW: Хороший звонок! Я прочитал вопрос слишком быстро и подумал, что он хочет сохранить записи, начинающиеся с ‘D’. Моя ошибка.
3. Я получаю неожиданную T_STRING, ожидая T_FUNCTION в строке 2 класса?
Ответ №3:
$i = 0;
$n = count($array);
while ($i < $n) {
if ($array[$i][0] == 'D')
unset($array[$i]);
$i;
}
Ответ №4:
foreach($array as $key => $name)
{
if(substr($name,0,1) == "D")
{
unset($array[$key]);
}
}
Это один из методов, который может хорошо сработать для вас.