2010-11-05 8 views
0

Что касается моего вопроса here, Jacob Relkin предложил большое решение для использования call_user_func_array. Это решило мою проблему, но теперь я очень любопытно о том, как сделать это в отсутствие этой функции, чтобы достичь того, что я хотел в моей оригинальный вопрос, который ниже для справки:Вызов функции с переменным числом параметров?

Original Question:

я создаю массив массивов следующим образом:

$final_array = array(); 
for($i = 0; $i < count($elements); $i++) { 
    for($j = 0; $j < count($elements); $j++) { 
     if($i!=$j) 
      $final_array[] = array_intersect($elements[$i], $elements[$j]); 
    } 
} 

Я пытаюсь выяснить список элементов, которые происходят во всех массивах внутри переменной $final_array. Поэтому мне было интересно, как передать это функции array_intersect. Может ли кто-нибудь сказать мне, как построить аргументы, используя $final_array[0], $final_array[1], ... $final_array[end_value] для array_intersect? Или, если есть лучший подход к этому, это тоже будет здорово.

Я ищу способ построить следующее:

array_intersect($final_array[0], $final_array[1], $final_array[2], ...)

+0

Почему не 'call_user_func_array'? –

ответ

3

Ну, единственный реальный способ сделать это, кроме call_user_func_array бы implode результирующий массив в разделенных запятыми аргументов, то сделать что-то действительно действительно зло и использовать eval:

$args_imploded = implode(',', $some_array); 

$result = eval('return array_intersect(' . $args_imploded . ')'); 
+0

О, так что 'eval' - это трюк. Понял. Спасибо за указатели. – Legend

2

Почему бы вам просто не избежать зла функции Eval и и se 'call_user_func_array' функция? Из того, что я понимаю о вашем коде, является то, что параметр $ final_array представляет собой массив массивов.

$result = call_user_func_array('array_intersect', $final_array); 

Здесь нет необходимости в функции eval.

EDIT: Глупо меня. Я не читал ваш первый абзац должным образом;). Пожалуйста, проигнорируйте это.

+0

Без проблем :) Это было просто любопытство :), но спасибо anyways ... +1 за решение. – Legend