как удалить элемент nbsp из массива

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