gpt4 book ai didi

php - 高效的 if 语句/for 循环

转载 作者:可可西里 更新时间:2023-11-01 00:35:16 26 4
gpt4 key购买 nike

2 个基于尝试使我的代码更高效的简短问题(我认为我的最终追求是使我的整个(相当复杂的)网站基于某种 MVC 框架,但不是专业程序员,我认为这是是一个漫长而陡峭的学习曲线..)

  1. 在这段代码中,有没有办法合并 if 语句和 for 循环,以避免嵌套:

    if($fileatt['name']!=null)
    {
    $attachedFiles = "You uploaded the following file(s)\n";
    for($i=0;$i<count($docNames);$i++)
    {
    $attachedFiles = $attachedFiles. " - " . $docNames[$i] . "\n";
    }
    }
  2. 目前,我做的是相当标准的事情,即从表单提交中拆分我的 $_POST 数组,“清理”内容并将元素存储在单独的变量中:

    $name = cleanInput($_POST['name']);
    $phone = cleanInput($_POST['phone']);
    $message = cleanInput($_POST['message']);
    ...

(其中 cleanInput() 包含 striptags()mysql_real_escape_string())

我原以为将所有信息保存在一个数组中可能会使我的代码更有效率,但有没有办法将一个函数应用于数组的所有(或选定)元素?例如,在 R 中,这就是 apply() 函数的作用。

或者,鉴于我的所有变量都与 $_POST 数组中的名称相同,是否有办法在 foreach 循环中动态生成所有变量? (当人们问他们是否可以动态生成变量时,我知道标准答案是使用 hashmap 或类似的,但我很想看看是否有我错过的技术)

最佳答案

您可以使用extract并将其与array_map结合使用

extract(array_map('cleanInput', $_POST), EXTR_SKIP);

echo $name; // outputs name

请注意,$_POST 可以是任何东西,然后用户可以向您的服务器提交任何东西,它会成为您代码中的一个变量,因此如果您有类似的东西

if(empty($varName)) { } // assumes $varName is empty initially

用户提交 $_POST['varName'] = 1 可以轻松绕过

为了避免这样的事故,你可以有一个数组的白名单,只过滤掉你需要的:

$whitelist = array('name', 'phone', 'message');
$fields = array();

foreach($_POST as $k => $v) {
if(in_array($k, $whitelist)) $fields[$k] = $v;
}

extract(array_map('cleanInput', $fields));

关于php - 高效的 if 语句/for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com