Как написать преобразование анонимных функций в обычную функцию при использовании переменной $

Я пытаюсь выяснить, как преобразовать часть 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);

Но это просто дает ошибку разбора. Любая идея о том, как это будет написано? Я очень ценю это.

1

Решение

Нет необходимости указывать ссылку на $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
)

)

Надеюсь это поможет 🙂

2

Другие решения

Прежде всего вы должны передать обратный вызов в виде строки, когда вы хотите использовать обычную функцию. Второго нет use до PHP 5.3, поэтому вам придется использовать глобальный.

И если вы соберете все воедино, вы получите:

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

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

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