Forum Webscript.Ru
Программирование => PHP => Тема начата: Lucent от 31 Июля 2004, 12:28:38
-
Можно ли в стандартные функции динамически передавать аргументы, то есть когда количесво и имена аргументов становятся
известными во время выполнения скрипта?
Например, мне надо отсортировать многомерный массив функцией 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);
-
Попробуй:
array_multisort ($a1[\'row1\'],SORT_DESC, (count($a) == 2) ? $a1[\'row2\'] : FALSE);
-
Да и вобще можно просто условие написать и вызывать функцию с нужными аргументами..
-
Это не подходит.
Я не знаю заранее наименование строк массива.
Они у меня совпадает с именами полей в таблице. Не знаю и количество.
То есть моя функция должна отсортировать как массив вида:
$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\']";
Но это не подходит так как это строковая переменная, а нужны строки-массивы, разделенные запятой.
Как передать этой функции динамически сформированные имена массивов, разделенные запятой?
Или никак нельзя?
-
Lucent:
строки-массивы, разделенные запятой
Ага..
Lucent:
динамически сформированные имена массивов
[p]eval[/p]
Генеришь РНР-код и выполняешь его.
Но вобще тут можно и простыми условиями обойтись...
-
Neter
Большое спасибо.
Eval - то, что мне нужно было.