Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个PHP代码可以改进吗?_Php - Fatal编程技术网

这个PHP代码可以改进吗?

这个PHP代码可以改进吗?,php,Php,有没有更好的方法来完成下面这个简单的任务?比如数组或者其他方法 <?PHP // current way if ($city != NULL) { $city = FilterALLHTML($city); } if ($state != NULL) { $state = FilterALLHTML($state); } if ($title != NULL) { $title = FilterALLHTML($title); } if ($division !=

有没有更好的方法来完成下面这个简单的任务?比如数组或者其他方法

<?PHP
// current way
if ($city != NULL) {
    $city = FilterALLHTML($city);
}
if ($state != NULL) {
    $state = FilterALLHTML($state);
}
if ($title != NULL) {
    $title = FilterALLHTML($title);
}
if ($division != NULL) {
    $division = FilterALLHTML($division);
}
?>

这是我当前的函数

function FilterALLHTML($document) {
    //old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html
    $text = strip_tags($document);
    $search = array ("/f.?u.?c.?k/i",
                 "/(s|$).?h.?i.?t/i",
                 '/(potspace|mycrib|palbolt)/i');
    $text = preg_replace ($search, '', $text);  
    return $text;
}
函数filteralhtml($document){
//旧数组行//“si”,//strip html
$text=带标签($document);
$search=数组(“/f.?u.?c.?k/i”,
“/(s |$)?h?i?t/i”,
“/(potspace | mycrib | palbolt)/i”);
$text=preg_replace($search,,$text);
返回$text;
}

更新-根据本帖的建议确定我的新功能,谢谢大家

function FilterALLHTML($var) {
    //old array line //"'<[\/\!]*?[^<>]*//?//>'si",// strip html
    if ($var != null){
        $text = strip_tags($var);
        $search = array ("/f.?u.?c.?k/i",
                     "/(s|$).?h.?i.?t/i",
                     '/(potspace|mycrib|palbolt|pot space)/i');
        $text = preg_replace ($search, '', $text);  
        return $text;
    }
    return null;
}
函数filteralhtml($var){
//旧数组行//“si”,//strip html
如果($var!=null){
$text=strip_标签($var);
$search=数组(“/f.?u.?c.?k/i”,
“/(s |$)?h?i?t/i”,
“/(potspace | mycrib | palbolt | potspace)/i”);
$text=preg_replace($search,,$text);
返回$text;
}
返回null;
}

更改
filteralhlhtml
函数以执行
null
检查并使其返回
null
? 然后你可以扔掉所有的
if
s

例如:

function FilterALLHTML($input)
{
    if ($input === null)
        return null;

    // Original code, I'll just use strip_tags() for a functional example
    return strip_tags($input);
}
编辑:

我想分享变量的另一种选择,因为我不太喜欢用字符串文字代替变量名。一路引用:)

函数filteralhtml(&$text)
{
如果($text!==null)
{
//为简单起见,省略了正则表达式位
$text=带标签($text);
}
}
$city=“纽约”;
$state=null;
$title=“先生”;
$fields=数组(&$city,&$state,&$title);
foreach($fields as&$var)
filteralhtml($var);

(注意:
filteralhtml
实现与第一个示例不同)

我不认为您可以提高性能,但您可以缩短语法,但最终对解释器来说是一样的

<?PHP
    $city = ($city == NULL) ? "default value" : FilterALLHTML($city);
    $state = ($state == NULL) ? "default value" : FilterALLHTML($state);
    $title = ($title == NULL) ? "default value" : FilterALLHTML($title);
    $division = ($division == NULL) ? "default value" : FilterALLHTML($division);
?>


“默认值”应该用你想要的值来代替,如果变量为null

那么,你已经可以考虑写一个函数了,因为你做了同样的事情四次。

假设FilterALLHTML不是自定义函数

function Filter($var)
{
    if ($var != null)
    {
        return FilterALLHTML($var);
    }
    return null;
}
或者只在filteralhtml函数中包含null检查,并在需要时从那里返回null

因此,如果您可以更改FilterALLHTML,那么您可以这样做:

function FilterALLHTML($var)
{
    if ($var == null)
    {
        return null;
    }
    else
    {
        //do your filtering
       return $filteredVar;
    }
}
是的,使用PHP的


如果您知道所有变量都是先前定义的,那么就不需要空检查。否则,空检查将阻止触发E_NOTICE错误。

除了Thorarin的答案之外,您可以更改filterall函数以接受数组作为输入,并通过引用传递它,它将修改数组的内容

$tofilter = array($city,$state,$division,$title);


filterall($tofilter);

就像我建议让你的
filteralhtml
函数检查空值一样。

zombat的答案是最好的,但我要补充的是,你也不应该真正检查
null
。如果由于某种原因,
filteralhlhtml
null
值有问题,而该问题不应该出现,请在
filteralhlhtml
函数定义中检查
null

$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
    $$var = FilterAllHTML($$var);
}

我没有看到有人提到,您可以通过引用传递参数来跳过重复的赋值:

function FilterALLHTML(&$var)
{
    if ($var == null)
    {
        $var = null;
    }
    else
    {
        $var = strip_tags($var);
    }
}
我相信您也可以在数组中存储引用,但我还没有尝试过

foreach (array(&$city, &$state, &$title, &$division) as $var)
{
  FilterALLHTML($var);
}

+1我喜欢你的回答,也许你可以在回答中对那些不明白的人更详细一点:)请对否决票发表评论?我不介意,但我想要一些建设性的批评。不要仅仅因为这不是你的答案就投反对票:)@Thorarin-从线程的外观来看,这是一个驾车经过的反对票。我也被击中了/@Thorarin&@Zombat,是的,有人把几乎所有人的票数都降到了-1,然后我把所有人的票数都降到了0,5分钟后他们又都是-1,我可能会把这个检查添加到我当前的函数中,因为我经常使用这个函数,我只是把4放在这个页面上,例如,但是你的代码真的很酷!我会去的。使用该函数感谢现在回想一下,当我在大约2年前编写此代码时,我想我读到,在这种情况下,如果不需要FilterALLHTML函数,则不调用该函数会有更好的性能,比如空值不需要该函数,所以我想如果我可以在调用该函数之前过滤掉这些,那会更好。我不确定这是否是更好的表现,因为我已经很久没有这样做了。如果你想看到itah,我已经在我的帖子中添加了我的函数,被否决了:(请评论。这将比在函数中添加“如果”提供更好的性能。如果“如果”在函数中,它将始终调用函数和“如果”,但添加“如果”首先,你会节省CPU值,因为空值没有被否决,但是我不认为你的微优化是一个有效的论据。而且,这个代码比原来的可读性差,而且功能不同于原来的。我也没有投票,但是我能理解为什么它被否决了。IMO你只是移动了复杂性而不是真希。让它更容易/更简单,比如Thorarin:)我猜只有我一个人,但我更喜欢“if”和“else”两种情况下的内联if语句只有一个语句,但是ye,我没有改变性能:dwy你想阻止用户说“frutcake”或“as heist”吗?
$vars = array('city', 'state', 'title', 'division');
foreach($vars as $var) {
    $$var = FilterAllHTML($$var);
}
function FilterALLHTML(&$var)
{
    if ($var == null)
    {
        $var = null;
    }
    else
    {
        $var = strip_tags($var);
    }
}
foreach (array(&$city, &$state, &$title, &$division) as $var)
{
  FilterALLHTML($var);
}