удалить теги ‹ и › из массива в php

У меня есть такой массив:

Array
(
    [0] => "<[email protected]>"
    [1] => "<[email protected]>"
    [2] => "<[email protected]>"
)

Теперь я хочу удалить "<" и ">" из массива выше, чтобы он выглядел так:

Array
(
    [0] => "[email protected]"
    [1] => "[email protected]"
    [2] => "[email protected]"
)

Как это сделать в пхп? Пожалуйста, помогите мне.

Я использую array_filter(); есть ли более простой способ сделать это, кроме array_filter()?


person diEcho    schedule 19.01.2010    source источник
comment
Ммм... что вы хотите удалить из первого массива? Для меня это пусто...   -  person Franz    schedule 19.01.2010
comment
Не бери в голову. Пекка только что отредактировал его.   -  person Franz    schedule 19.01.2010


Ответы (5)


Вы можете взять на себя array_walk:

// Removes starting and trailing < and > characters

 function trim_gt_and_lt(&$value) 
{ 
    $value = trim($value, "<>"); 
}

array_walk($array, 'trim_gt_and_lt');

Обратите внимание, однако, что это также удалит начальный > и конечный <, что может быть не то, что вам нужно.

person Pekka    schedule 19.01.2010
comment
Это также удалит начальный › и конечный ‹. Этого хочет ОП? - person cletus; 19.01.2010
comment
Возможно, вы даже могли бы сделать это с помощью анонимной функции в array_walk(), но я не могу сейчас искать и тестировать. - person Pekka; 19.01.2010
comment
@cletus, хорошая мысль. Я предполагаю, что в его наборе данных это не имеет значения, но все же. +1 к вашему решению и добавил предостережение к моему. - person Pekka; 19.01.2010
comment
На самом деле, возможно, вы могли бы использовать str_replace вместо trim на тот случай, если скобки могут быть где-то еще (не то чтобы я действительно в это верю)... - person Franz; 19.01.2010
comment
Это важное предостережение, но, честно говоря, я даже не знал, что вы можете сделать это с помощью trim(), поэтому +1 за это. - person cletus; 19.01.2010
comment
Это не работает Уважаемый ..... оно не удаляет ни одного тега .. может быть я ошибаюсь или вы не поняли мою проблему - person diEcho; 19.01.2010
comment
У меня отлично работает, удаляет все вхождения < и > из массива. - person Pekka; 19.01.2010
comment
@Franz str_replace сделает это. Я разместил свой ответ, который показывает, как это сделать, используя str_replace - person AntonioCS; 19.01.2010
comment
Я знаю, что это так. Я поэтому и упомянул ;) - person Franz; 19.01.2010

Во-первых, если вы хотите изменить значения, вам нужно array_map(), а не < a href="http://www.php.net/manual/en/function.array-filter.php" rel="noreferrer">array_filter(). array_filter() выборочно удаляет или сохраняет элементы массива.

$output = array_map('remove_slashes', $input);

function remove_slashes($s) {
  return preg_replace('!(^<|>$)!', '', $s);
}

Конечно, вы можете сделать это и с помощью простого цикла foreach.

person cletus    schedule 19.01.2010
comment
Разве это не называется угловыми скобками? - person Gordon; 19.01.2010

str_replace — это опция или любые другие замещающие функции в PHP. как preg_replace и т. д.

person Residuum    schedule 19.01.2010

вы проходите через массив и делаете это один за другим?

$arr = array( "<[email protected]>", "<[email protected]>" ,"<[email protected]>");
foreach ($arr as $k=>$v){
    $arr[$k] = trim($v,"<>") ;
}
print_r($arr);

выход

$ php test.php
Array
(
    [0] => [email protected]
    [1] => [email protected]
    [2] => [email protected]
)
person ghostdog74    schedule 19.01.2010
comment
применить эту функцию или просто написать вывод, что я хочу - person diEcho; 19.01.2010
comment
что ты имеешь в виду? как вы можете видеть из моего вывода, он делает то, что вы хотите - person ghostdog74; 19.01.2010

Почему бы просто не использовать str_replace

$teste = array("<[email protected]>","<[email protected]>","<[email protected]>");
var_dump(str_replace(array('<','>'),'',$teste));

Распечатает

array
  0 => string '[email protected]' (length=11)
  1 => string '[email protected]' (length=13)
  2 => string '[email protected]' (length=17)
person AntonioCS    schedule 19.01.2010