PHP:去掉数组_values()中的值的标记

PHP:去掉数组_values()中的值的标记,php,arrays,preg-replace,implode,strip-tags,Php,Arrays,Preg Replace,Implode,Strip Tags,在使用选项卡内爆之前,我想去掉数组_values()中的值的标记 我试着用下面这行,但我有一个错误 $output = implode("\t",strip_tags(array_keys($item))); 理想情况下,我希望从值中去掉换行符、双空格和制表符 $output = implode("\t",preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), strip_tags(array_keys($ite

在使用选项卡内爆之前,我想去掉数组_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;
}

请让我知道,如果你有任何想法如何解决这个问题。谢谢

strip_标记
仅适用于字符串,不适用于数组输入。所以,您必须在
内爆
生成一个输入字符串后应用它

$output = strip_tags(
    implode("\t",
        preg_replace(
           array("/\t/", "/\s{2,}/", "/\n/"),
           array("", " ", " "),
           array_keys($item)
        )
    )
);
你必须测试它是否能给你想要的结果。我不知道preg_替换完成了什么

否则,您可以使用
array\u map(“strip\u tags”,array\u key($item))
首先删除标记(如果字符串中的标记中确实存在任何重要的
\t


(不知道你的大功能是关于什么的。)

剥离标签很简单,如下所示:

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

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

array_walk($a, 'fix');

print_r($a);
$a=array('key'=>'array item
'); 函数修复(&$item,$key) { $item=带标签($item); } 数组_walk($a,“fix”); 印刷费($a);
当然,您可以在fix函数中对$item进行任何修改。更改将存储在数组中


对于多维数组
使用array_walk_recursive($a,'fix')

尝试将数组映射到strip_标记和trim

implode("\t", array_map("trim", array_map("strip_tags", array_keys($item))));

看起来您只需要使用array\u map,因为strip\u标记需要字符串,而不是数组

$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;

非常感谢!此功能用于导出excel文件。但是当我在值中有标记、换行符等时,它会导致“bug”。函数fix()中$key的用途是什么?它似乎没有使用这个变量。谢谢。
array\u walk
将调用回调函数并向其传递项和键。当您不声明
$key
时,PHP可能会优雅地忽略它,因此您可以将其忽略。四年过去了,我不记得原因了,但如果我不得不猜测,要么a)我想证明你在第二个论点中得到了关键,以防你需要它,b)我觉得这种方式更严格、更完整,我更喜欢,或者c)我基于一些包含关键的片段,我甚至没有注意到。:)是的,当然,4年是相当长的一段时间,所以感谢您的回复,我从未尝试过使用array_walk,所以很高兴了解它。