2012-04-12 3 views
1

ОПИСАНИЕ ПРОБЛЕМЫ:
То, что я пытаюсь сделать, это передать динамически созданные переменные из цикла в функцию в php. Более конкретно, я использовал цикл for для создания переменных и назначения данных для них. Затем используйте цикл for, чтобы связать все переменные вместе. Затем передайте строку функции multisort_array и взорвите строку для использования переменных. Я не уверен, что я делаю неправильно.
PHP: Передача динамически создаваемых переменных во встроенную функцию

ВОПРОС:
Как бы я пройти кучу динамически создаваемых переменных в функции сортировки, не зная, сколько я собираюсь создать? Это моя делема.

КОД:

$arr2[0] = "100::HOMEDEPOT"; 
$arr2[1] = "200::WALMART"; 
$arr2[2] = "300::COSTCO"; 
$arr2[3] = "400::WALGREENS"; 
$arr2[4] = "500::TACO BELL"; 

// explodes first value of $arr2 
$tmp = explode("::",$arr2[0]); 

// determines how many dynamic variables to create 
for($k=0;$k<count($tmp);$k++){ 
    ${"mArr".$k} = Array(); 
} 

// loops thru & assigns all numbers to mArr0 
// loops thru & assigns all names to mArr1 
for ($k=0;$k<count($arr2);$k++){ 
    $tmp = explode("::",$arr2[$k]); 

    for($l=0;$l<count($tmp);$l++){ 
     ${"mArr".$l}[$k] = $tmp[$l]; 
    } 
} 

// Will add a for loop to combine the variables into string 
$param = "$mArr1,$mArr0"; 

// send the string to array_multisort to be sorted by name 
// have tried the following options: 
// 1. array_multisort(explode(",",$param)); 
// 2. call_user_func_array(array_multisort,explode(",",$param)); 
// both do not sort & give me an error. 

Заранее спасибо за вашу помощь. Я открыт для любых предложений по другим способам, которыми это может быть выполнено, но я хотел бы, чтобы он был в php-коде, если это вообще возможно.

+0

переключатель (отсчет ($ TMP)) { случай 1: array_multisort ($ mArr0); break; case 2: array_multisort ($ mArr1, $ mArr0); break; case 3: array_multisort ($ mArr1, $ mArr0, $ mArr2); break; case 4: array_multisort ($ mArr1, $ mArr0, $ mArr2, $ mArr3); break; case 5: array_multisort ($ mArr1, $ mArr0, $ mArr2, $ mArr3, $ mArr4); break; } echo json_encode ($ mArr1); // ВМЕСТО ДЕЙСТВИЯ, ЧТО Я ХОЧУ ДИНАМИЧНО СБЫВАТЬ СПИСОК ДИНАМИЧЕСКИХ ПЕРЕМЕН. – serge

ответ

0

Просто передайте массив в функцию.

arraySort($array); 
+0

Я пытаюсь сделать следующее: array_multisort ($ mArr1, $ mArr0, $ mArr2, $ mArr3); но я не знаю, сколько из $ mArr ## у меня будет. – serge

+0

мультисортировка будет принимать многомерные массивы. Вместо того, чтобы вывести строку из массивов, загрузите их в другой массив. –

+0

Кроме того, что именно вы пытаетесь сделать? Это выглядит очень грязно. Не обижайтесь, но я уверен, что есть намного лучший способ добиться того, над чем вы работаете. –

0

Сортировка массива перед разбиением его в других массивах, используя custom sorting function:

$arr2[0] = "100::HOMEDEPOT"; 
$arr2[1] = "200::WALMART"; 
$arr2[2] = "300::COSTCO"; 
$arr2[3] = "400::WALGREENS"; 
$arr2[4] = "500::TACO BELL"; 

//Split the input in place, you could also use a new array for this 
for($i = 0;$i < count($arr2);$i++) 
{ 
    $arr2[$i] = explode("::",$arr2[$i]); 
} 

//Define our new sorting function 
function sort_second_item($a,$b) 
{ 
    return strcmp($a[1],$b[1]); 
} 

var_dump($arr2); 
usort($arr2,'sort_second_item'); 
var_dump($arr2); 

$rotated = array(); 

//Rotate $arr2 
for($i = 0; $i < count($arr2); $i++) 
{ 
    for($j = 0;$j < count($arr2[$i]); $j++) 
    { 
     if(!isset($rotated[$j])) 
     { 
      $rotated[$j] = array(); 
     } 
     $rotated[$j][$i] = $arr2[$i][$j]; 
    } 
} 
var_dump($rotated); 
+0

Хорошо, вы изменили вопрос на середину ответа ... нечестно. –

+0

Вышеприведенный код будет работать, если данные, которые вы всегда читаете, имеют два массива. Что касается чтения в данных, которые имеют два массива, три массива, пять массивов.Как вы справляетесь с этим? Вы выполняете функцию для обработки отдельно или что я пытаюсь сделать, это создать функцию, которая может обрабатывать все из них путем динамического создания переменных. Проблема, с которой я столкнулся, заключается в том, как отправить эти динамически созданные переменные в multisort_array(), не зная, сколько я отправлю. – serge

+0

См. Обновленный ответ –

Смежные вопросы