从PHP中包含的函数文件向数组添加值

时间:2016-04-19 03:37:04

标签: php arrays function include

我是编程PHP的新手,我需要帮助我确定一个简单的问题。我试图在我的表单页面中为一个名为errors的数组添加值,这样我以后可以回复它以进行验证,虽然我似乎无法从我包含的函数文件中添加任何数组。

我需要函数<?php require_once("functions.php") ?>

然后我创建了数组<?php $errors = array(); ?>

然后我从包含<?php minLength($test, 20); ?>

调用该函数

这里的功能

function minLength($input, $min) { if (strlen($input) <= $min) { return $errors[] = "Is that your real name? No its not."; } else { return $errors[] = ""; } }

然后在最后回复它们并在此结束

<?php 
        if (isset($errors)) {
            foreach($errors as $error) {
    echo "<li>{$error}</li><br />";
        } 
        } else {
            echo "<p>No errors found </p>";
        }
        ?>

但最后没有回声,提前感谢你的帮助

2 个答案:

答案 0 :(得分:0)

minLength()函数按您的定义返回$errors。但是,您没有$errors接受代码中该函数的返回。

示例代码为:

<?php
    require_once("functions.php");
    $errors = array();

    $errors = minLength($test, 20);

    if (count($errors) > 0) {
        foreach($errors as $error) {
            echo "<li>{$error}</li><br />";
        } 
    } else {
        echo "<p>No errors found </p>";
    }
?>

答案 1 :(得分:0)

功能就像有围墙的花园 - 你可以进出,但是当你进去时,你就看不到墙外的人了。为了与代码的其余部分进行交互,您必须将结果传递回去,通过引用传递变量,或者(最坏的方式)使用全局变量。

您可以将$ errors数组声明为函数内的全局,然后更改它。这种方法不要求我们从函数中返回任何东西。

function minLength($input, $min) {
    global $errors;
    if (strlen($input) <= $min) {
        //this syntax adds a new element to an array
        $errors[] = "Is that your real name? No its not.";
    } 
    //else not needed. if input is correct, do nothing...
}

您可以通过引用传入$ errors数组。这是另一种允许在函数内部更改全局声明的变量的方法。我推荐这种方式。

function minLength($input, $min, &$errors) { //notice the &
    if (strlen($input) <= $min) {
        $errors[] = "Is that your real name? No its not.";
    } 
}
//Then the function call changes to:
minLength($test, 20, $errors); 

但为了完整起见,您可以通过返回值来实现这一目标。这很棘手,因为无论输入是否错误,它都会添加一个新的数组元素。我们真的不想要一个充满空错误的数组,这没有任何意义。它们不是错误,所以它不应该返回任何东西。为了解决这个问题,我们重写函数以返回字符串或布尔值false,并在我们将其返回时测试该值:

function minLength($input, $min) {
    if (strlen($input) <= $min) {
        return "Is that your real name? No it's not.";
    } else {
        return false;
    }
}

//meanwhile, in the larger script...
//we need a variable here to 'catch' the returned value of the function
$result = minLength("12345678901234", 12);
if($result){ //if it has a value other than false, add a new error
    $errors[] = $result;
}