#php #arrays #encoding
#php #массивы #кодирование
Вопрос:
в моем php-массиве есть элементы, которые содержат элементы amp;nbsp , я пытаюсь удалить элементы, которые содержат только пробел (amp;nbsp), поэтому я применяю к своему массиву:
$steps = array_map( 'html_entity_decode', $steps);
$steps = array_map('trim',$steps);
$steps = array_filter($steps, 'strlen'); //(i try also array_filter($steps);
но элементы находятся.
Любая идея, пожалуйста
Комментарии:
1. Какие данные вы пытаетесь проанализировать? Приведите нам пример
2. обязательно: <p> шаг1</p> <p>шаг2</p> <p>amp;nbsp;</p> <p>amp;nbsp;</p> <p>шаг3</p> массив (1 => шаг1, 2=> шаг2, 3=> , 4=>, шаг3);
3. конечно: я удаляю с html-страницы этот блок и помещаю его в массив, поэтому я получил этот результат: <p>шаг1</p> <p>шаг2</p> <p>amp;nbsp;</p> <p>amp;nbsp;</p> <p>шаг3</p> print_r($steps) : array(1 => шаг1, 2=> шаг2, 3=> , 4=>, шаг3);
4. Я думаю, ваша проблема в том, что вы используете html_entity_decode() вместо strip_tags(). Я обновил свой приведенный ниже код, чтобы отразить это.
5. Вы можете использовать
string_replace()
— w3schools.com/php/func_string_str_replace.asp
Ответ №1:
Попробуйте это:
/**
* Function to strip away a given string
**/
function remove_nbsp($string){
$string_to_remove = "amp;nbsp;";
return str_replace($string_to_remove, "", $string);
}
# Example data array
$steps = array("<p>step1</p>", "<p>step2</p>", "<p>step3</p>", "<p>amp;nbsp;</p>", "amp;nbsp;", "<p>amp;nbsp;</p>", "<p>step4</p>");
$steps = array_map("strip_tags", $steps);
//Strip_tags() will remove the HTML tags
$steps = array_map("remove_nbsp", $steps);
//Our custom function will remove the amp;nbsp; character
$steps = array_filter($steps);
//Array_filter() will remove any blank array values
var_dump($steps);
/**
* Output:
array(4) {
[0]=>
string(5) "step1"
[1]=>
string(5) "step2"
[2]=>
string(5) "step3"
[6]=>
string(5) "step4"
}
*/
Возможно, вам даже будет проще выполнить foreach():
foreach($steps as $dirty_step){
if(!$clean_step = trim(str_replace("amp;nbsp;", "", strip_tags($dirty_step)))){
//Ignore empty steps
continue;
}
$clean_steps[] = $clean_step;
}