Автор Тема: Динамическая передача аргументов функциям  (Прочитано 3586 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Можно ли в стандартные функции динамически передавать аргументы, то есть когда количесво и имена аргументов становятся
известными во время выполнения скрипта?

Например, мне надо отсортировать многомерный массив функцией array_multisort ().
Вначале надо отсортировать массив из 1 строки по строке $a1[\'row1\'].
Затем тот же массив, но состоящий из 2 строк $a1[\'row1\'], $a1[\'row2\']

То есть, если бы я заранее знал размерности массива, я бы написал:
1. array_multisort ($a1[\'row1\'],SORT_DESC);
2. array_multisort ($a1[\'row1\'],SORT_DESC,$a1[\'row2\']);

То есть упрощенно, нужно что типа:
$a="$a1[\'row1\'],SORT_DESC,$a1[\'row2\']";
array_multisort ($a);

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
Попробуй:

array_multisort ($a1[\'row1\'],SORT_DESC, (count($a) == 2) ? $a1[\'row2\'] : FALSE);
Мне тормоз послужил толчком...

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
Да и вобще можно просто условие написать и вызывать функцию с нужными аргументами..
Мне тормоз послужил толчком...

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Это не подходит.
Я не знаю заранее наименование строк массива.
Они у меня совпадает с именами полей в таблице. Не знаю и количество.
То есть моя функция должна отсортировать как массив вида:
$ar[\'id\']=(0,1,2);
$ar[\'name\']=(\'a\',\'b\',\'c\');
$ar[\'status\']=(6,8,3);

так и массив:

$ar[\'id\']=(1,0,2);
$ar[\'name\']=(\'a\',\'b\',\'c\');

и любой другой.
Но в этих массивах всегда присутствует 1 строка [\'id\'].
По ней и нужно провести сортировку, но не только элементов этой строки,
но и всех отсальных соответственно, то есть если в [\'name\'] элемент \'a\' находится в одном
столбце с элементами 0 и 6, то и после сортировки он там долже находится.

С помощью array_keys я могу получить ключи массива, имя массива всегда ar.
То есть в цикле смогу сформировать строку $a=",$ar[\'id\'],$ar[\'name\']";
Но это не подходит так как это строковая переменная, а нужны строки-массивы, разделенные запятой.

Как передать этой функции динамически сформированные имена массивов, разделенные запятой?
Или никак нельзя?

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
Динамическая передача аргументов функциям
« Ответ #4 : 01 Августа 2004, 12:17:39 »
Цитировать
Lucent:
строки-массивы, разделенные запятой

Ага..

Цитировать
Lucent:
динамически сформированные имена массивов

[p]eval[/p]
Генеришь РНР-код и выполняешь его.

Но вобще тут можно и простыми условиями обойтись...
Мне тормоз послужил толчком...

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Динамическая передача аргументов функциям
« Ответ #5 : 01 Августа 2004, 14:41:41 »
Neter

Большое спасибо.
Eval - то, что мне нужно было.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28