Отменить установку элемента массива на основе первого символа

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

Это один из методов, который может хорошо сработать для вас.