2011-09-19 4 views
0

내 응용 프로그램에는 UI 양식에서 얻을 수있는 몇 가지 매개 변수 (zone_id, startdate, enddate, brand, model)가 있습니다. 이러한 각 매개 변수는 하나 이상의 매개 변수를 포함하는 배열입니다.순열을 기반으로 키를 생성하는 최적의 알고리즘

Array 
(
[sel_date_option] => today 
[startdate] => 2011-09-19 
[enddate] => 2011-09-19 
[zone_id] => 1576,1562,1561 
[model] => Array 
    (
     [0] => A300 
    ) 

[brand] => Array 
    (
     [0] => ACTS 
    ) 

) 

지금, 나는 이러한 매개 변수의 조합입니다 키를 생성하려면 :

내 폼 매개 변수는 다음과 같이 보인다. 그들은 다음과 같은 것일 수 있습니다 :

[zone_id]_[model]_[brand]_[model]_[startdate]_[enddate] 

위의 모든 가능한 배열을 나타냅니다. 같은 STARTDATE을주는 내부

1576_ACTS_A300_2011-09-19 
1562_ACTS_A300_2011-09-19 
1561_ACTS_A300_2011-09-19 

을 또한 2011-09-19부터 2011-09-21까지 같은 기간을 입력 할 수 있습니다 한번 종료 날짜 : 위의 입력을 위해, 나는 다음 키를 얻어야한다. 내가 뭐하는 거지 것은 처음에는 배열을 만드는

Array 
(
[0] => Array 
    (
     [0] => 1576_DZ_A300 
    ) 

[1] => Array 
    (
     [0] => 1576_DZ_A300 
     [1] => 1562_DZ_A300 
    ) 

[2] => Array 
    (
     [0] => 1576_DZ_A300 
     [1] => 1562_DZ_A300 
     [2] => 1561_DZ_A300 
    ) 

[3] => Array 
    (
     [0] => 1576_DZ_A300 
     [1] => 1562_DZ_A300 
     [2] => 1561_DZ_A300 
     [3] => 1563_DZ_A300 
    ) 
) 

입니다 :

내가 뭐하는 거지 것은 내가 모든 매개 변수 배열을 통해 반복 중첩 된 사용 후 다음과 같은 배열의 무언가의 복잡한 배열을 만드는 오전입니다 나는 가능한 모든 모델에 중첩 루프를 사용하여 루프와 같은 배열 브랜드입니다 그리고

Array 
(
[0] => 1576 
[1] => 1562 
[2] => 1561 
[3] => 1563 
) 

:

function getInventoryData($criteria) 
{ 

    $index = ""; 

    if($criteria['zone_id']!='') 
    { 
     $zone = explode(',', $criteria['zone_id']); 
     for($i=0;$i<count($zone);$i++) 
     { 
      $index[] .= $zone[$i]; 
     } 

     echo '<pre>';print_r($index);exit; 
    } 

    if(!empty($criteria['model'])) 
    { 
     foreach($index as $key=>$value) 
     { 
      foreach($criteria['model'] as $model) 
      { 
       $temparr[] = $index[$key].'_'.$model; 
      } 
      $index[$key] = $temparr; 
     } 

    } 
을 모든 영역으로

이제 이것을 달성 할 수있는 효율적인 방법이 있습니까?

또한

는, 상기 방법과 관련된 다른 오버 헤드가 :

상기 생성 된 키를 판독하는 동안, I는 모든 레벨을 통해 대량의 데이터 시퀀스의 경우에 루프가 복잡도 실제로 문제가 될 수있다 우려의. 난 당신이 정확하게 뭘 하려는지 이해한다면

답변

0

이 가장 효율적인 방법 나는 위의 작업을 수행하는 가지고 올 수 :

function getInventoryData ($arr) { 
    // Make sure all required keys are set 
    if (!isset($arr['zone_id'],$arr['model'],$arr['brand'],$arr['startdate'],$arr['enddate'])) return FALSE; 
    // Make a date string for the end of the keys 
    $dateStr = $arr['startdate'].(($arr['startdate'] == $arr['enddate']) ? '' : '_'.$arr['enddate']); 
    // Normalise the data 
    if (!count($arr['zone_id'] = array_unique(explode(',',$arr['zone_id']))) || !count($arr['brand'] = array_unique($arr['brand'])) || !count($arr['model'] = array_unique($arr['model']))) return FALSE; 
    // Get all possible permutations 
    $result = array(); 
    foreach ($arr['zone_id'] as $zone) foreach ($arr['brand'] as $brand) foreach ($arr['model'] as $model) $result[] = "{$zone}_{$brand}_{$model}_{$dateStr}"; 
    // Return the result 
    return $result; 
} 
+0

감사 @DaveRandom, 내가 3/4 수준에 대한에만 관심이었다 중첩하는 것이지만 실제로 이것은 배열 키의 단일 레벨 만 생성하므로 편리합니다. – debaShish

관련 문제