PHP: убрать теги со значения внутри array_values ​​() - PullRequest
7 голосов
/ 06 февраля 2011

Я хочу убрать теги со значения внутри array_values ​​() перед развертыванием с помощью вкладок.

Я пробовал с этой строкой ниже, но у меня есть ошибка,

$output = implode("\t",strip_tags(array_keys($item)));

в идеале я хочу убрать разрывы строк, двойные пробелы, символы табуляции со значением,

$output = implode("\t",preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), strip_tags(array_keys($item))));

но я думаю, что мой метод не верен!

это вся функция,

function process_data($items){

    # set the variable
    $output = null;

    # check if the data is an items and is not empty
    if (is_array($items)  && !empty($items))
    {
        # start the row at 0
        $row = 0;

        # loop the items
        foreach($items as $item)
        {
            if (is_array($item) && !empty($item))
            {
                if ($row == 0)
                {
                    # write the column headers
                    $output = implode("\t",array_keys($item));
                    $output .= "\n";
                }

                # create a line of values for this row...
                $output .= implode("\t",array_values($item));
                $output .= "\n";

                # increment the row so we don't create headers all over again
                $row++;
            }
        }       
    }

    # return the result
    return $output;
}

Пожалуйста, дайте мне знать, если у вас есть идеи, как это исправить. Спасибо!

Ответы [ 4 ]

3 голосов
/ 06 февраля 2011

попробуйте сопоставить массивы с strip_tags и обрезать.

implode("\t", array_map("trim", array_map("strip_tags", array_keys($item))));
3 голосов
/ 06 февраля 2011

strip_tags работает только для строк, а не для ввода массива.Таким образом, вы должны применить его после того, как implode произвёл строку ввода.

$output = strip_tags(
    implode("\t",
        preg_replace(
           array("/\t/", "/\s{2,}/", "/\n/"),
           array("", " ", " "),
           array_keys($item)
        )
    )
);

Вам нужно будет проверить, дает ли он желаемый результат.Я не знаю, что выполняет preg_replace.

В противном случае вы могли бы использовать array_map("strip_tags", array_keys($item)), чтобы сначала удалить теги (если действительно есть какие-либо существенные \t в тегах в строках.)

(Понятия не имею, о чем ваша большая функция.)

2 голосов
/ 06 февраля 2011

Удаление тегов очень просто:

$a = array('key'=>'array item<br>');

function fix(&$item, $key)
{
    $item = strip_tags($item);
}

array_walk($a, 'fix');

print_r($a);

Конечно, вы можете вносить любые изменения в $ item в функции исправления.Изменение будет сохранено в массиве.

Для многомерного массива use array_walk_recursive($a, 'fix');.

1 голос
/ 06 февраля 2011

Похоже, вам просто нужно использовать array_map, так как strip_tags ожидает строку, а не массив.

$arr = array(   "Some\tTabbed\tValue" => '1',
                "Some  value  with  double  spaces" => '2',
                "Some\nvalue\nwith\nnewlines" => '3',
            );

$search = array("#\t#", "#\s{2,}#", "#\n#");
$replace = array("", " ", " ");
$output = implode("\t", preg_replace($search, $replace, array_map('strip_tags', array_keys($arr))));
echo $output;
...