Почему вот этот код:
var_dump(call_user_func_array('in_array', [1 => [1,2,3], 0 => 2]));
ругается "Warning: in_array() expects parameter 2 to be array, integer given" ?
Там же передается массив в call_user_func_array. Разве она не должна сопоставлять и индексы тоже? Я специально поменял местами аргументы, но поставил правильные индексы чтобы это проверить.
P.S. Обнаружил это когда пытался реализовать каррирование. Взял пример из этой статьи. Вот пример из реального кода что я хотел сделать (данные только другие):
$a = [1, 2, 3];
$b = [4, 1, 5, 3];
// код функции curry есть в статье
var_dump(array_filter($b, curry('in_array', [1 => $a])));
Это короче чем писать анонимную функцию (ох как же мне не хватает стрелочных лямбд...). Но ведь не работает. :( А все потому что call_user_func_array не хочет сопоставлять индексы.
Немного переделал реализацию каррирующей функции из статьи и заработало.
function curry($callback, $args = []) {
$num = (new ReflectionFunction($callback))->getNumberOfParameters();
return function() use($callback, $num, $args) {
$args = $args + func_get_args();
ksort($args);
return count($args) < $num ? curry($callback, $args) : call_user_func_array($callback, $args);
};
}
Оказывается array_merge (который был в оригинале) не сохраняет ключи. А через простое сложение массивов все сохраняется. :D Плюс еще сортировку по ключам добавил, раз уж оно само не умеет.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Делаю сервис, который возвращает ответ в StringПроблема в том что, если я сделаю функцию с 1 инпутом и ввожу 1 инпут, то все работает, а когда хочу...
Здравствуйте дорогие друзья, очередной вопрос из серии "ИЗВРАЩЕНИЕ"Можно ли (если да то каким образом) можно запустить внешний