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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 数组映射中的变量不';t返回值_Php_Arrays_Array Map - Fatal编程技术网

Php 数组映射中的变量不';t返回值

Php 数组映射中的变量不';t返回值,php,arrays,array-map,Php,Arrays,Array Map,数组映射中的条件为true,在条件中插入了数据和打印语句。但为什么它不返回变量值呢。此处successs正在打印,但$var变量的值未更新。数组映射仅返回数组,是否与此处相关 $var = 'fail'; array_map(function ($en, $np, $idSrvcs) { $data=[Fnct::filter_int($idSrvcs),Fnct::filter_str($en),Fnct::filter_str($np)]; if(MdlDb::insrtD

数组映射中的条件为true,在条件中插入了数据和打印语句。但为什么它不返回变量值呢。此处
successs
正在打印,但
$var
变量的值未更新。数组映射仅返回数组,是否与此处相关

$var = 'fail';

array_map(function ($en, $np, $idSrvcs) {
    $data=[Fnct::filter_int($idSrvcs),Fnct::filter_str($en),Fnct::filter_str($np)];
    if(MdlDb::insrtData('srvcs_dtl',$data,'')){
        echo 'success'; // this line is printing
        $var = 'success';
    }
}, $en, $np, $idSrvcs);

echo $var // here output is fail.

因为匿名函数(array_map的回调)中的变量$var有自己的作用域,它是一个不同的变量。在为$var赋值之前,可以通过转储$var进行检查。它将是未定义的,而不是“失败”

您可以使用
use
关键字从函数内的父作用域传递变量,如下所示:

// Inherit $message
$example = function () use ($message) {
    var_dump($message);
};
$example();
来自示例#3从父范围继承变量

请注意,仅传递变量不足以修改它,因为函数检索副本(对象将通过引用传递):

$s = 1;

$a = function () {$s++;};
$a(); // PHP Notice:  Undefined variable: b
var_dump($s); // 1

$b = function () use ($s) {$s++;};
$b();
var_dump($s); // 1

$c = function () use (&$s) {$s++;};
$c();
var_dump($s); // 2