В моем приложении у меня есть несколько параметров (zone_id, startdate, enddate, brand, model), которые я получаю из формы пользовательского интерфейса. Каждый из этих параметров представляет собой массив, содержащий 1 или более параметров.
Параметры моей формы выглядят примерно так:
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]
Это отражает все возможные варианты вышеуказанных значений.
Для указанных выше входных данных я должен получить следующие ключи:
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;
}
}
Теперь, есть ли другой эффективный метод для достижения этой цели?
Кроме того, есть еще одна служебная информация, связанная с вышеуказанным методом:
При чтении сгенерированных ключей я должен пройти по всем уровням, и в случае большой последовательности данных сложность может действительно вызывать беспокойство.