如何在使用 $variable 时将匿名函数转换为常规函数

How to write convert an anonymous functions to a regular function while using use $variable

我正在尝试弄清楚如何将带有匿名函数的 array_map 部分转换为一个函数,同时使用 use 函数来支持 php 5.2,但我一直在获取一个错误。这是我当前的代码。

<?php

$collection = array();

$op_field = array(
    'fname' => 'sarmen',
    'lname' => 'b',
    'age' => 33,
    'gender' => 'male'
);

$nf_field = array(
    'type' => 'human',
    'age' => 30,
    'gender' => 'male',
    'ethnicity' => 'american'
);



array_map(function($op, $nf) use (&$collection)
{
    $collection[] = array(
        'op' => $op,
        'nf' => $nf
    );
}, $op_field, $nf_field);


print_r($collection);

我试过了

function mapping($op, $nf)
{
    $collection[] = array(
        'op' => $op,
        'nf' => $nf
    );
    return $collection;
}

array_map(mapping($op, $nf), use ($&collection), $op_field, $nf_field);

但这只是给出了一个解析错误。关于如何编写的任何想法?非常感谢。

首先,当您想使用普通函数时,您必须将回调作为字符串传递。其次 PHP 5.3 之前没有 use,所以你必须使用 global.

如果你把所有东西放在一起你会得到:

function callbackFunction($op, $nf){
    global $collection;

    $collection[] = array(
        'op' => $op,
        'nf' => $nf
    );
}

array_map("callbackFunction", $op_field, $nf_field);

无需传递对 $collection 的引用,只需执行以下操作即可:

function mapping($op, $nf)
{
    return array(
        'op' => $op,
        'nf' => $nf
    );
}

$collection = array_map('mapping', $op_field, $nf_field);

产量:

Array
(
    [0] => Array
        (
            [op] => sarmen
            [nf] => human
        )

    [1] => Array
        (
            [op] => b
            [nf] => 30
        )

    [2] => Array
        (
            [op] => 33
            [nf] => male
        )

    [3] => Array
        (
            [op] => male
            [nf] => american
        )

)

希望这对您有所帮助:)