разбить вывод, используя массив

diversia

Новичок
Есть массив:
car_id | user_id | date
1 | 1 | 20.05.2012
2 | 1 | 20.05.2012
3 | 1 | 21.05.2012
4 | 3 | 22.05.2012
9 | 6 | 24.05.2012
...
Необходимо сначала сформировать все авто пользователя 1 (выполнить действие со списком его авто), затем также с пользователями 3, 6...

Например:
1 | 1 | 20.05.2012
2 | 1 | 20.05.2012
3 | 1 | 21.05.2012
-> mail();

4 | 3 | 22.05.2012
-> mail();

9 | 6 | 24.05.2012
-> mail();
...
Прошу вашей помощи!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Код покажи, как пытался сделать, что не получилось.
 

diversia

Новичок
наполняю:
PHP:
$arr[$user_id][$car_id]=$date;
вывожу:
PHP:
$x=1;
$mess .= "Авто пользователя: <br />";
$x=1;
while ($x <= $user_id):
$y=1;
  while ($y <= $car_id):
    if($arr[$x][$y]){$mess .= $arr[$x][$y]."<br />";$a=1;}
    $y++;
  endwhile;
$x++;
if ($a){print "<br />$mess ...send<br />"; $a=0;}
endwhile;
Проблема в том, что id пользователя или id авто может быть достаточно большим (2000, 5000...) и идут не по порядку - большое кол-во шагов прокрутки. Иными словами не могу правильно задать значения x и y.
 

baev

‹°°¬•
Команда форума
Данные откуда берутся?
Hint: если из базы данных, то «ORDER by…» в запросе решит проблему с «идут не по порядку».
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я вообще не понимаю, в чем тут у тебя вопрос-проблема. Ну пусть у тебя там id юзера будет равен хоть 1000 000, это же не значит, что у тебя миллион элементов в массиве.

Если с правильно понял, то тебе надо отсортировать Arr[user_id] и все. Как раз там ты сможешь обрабатывать каждого юзера отдельно, не делая проход по всему массиву несколько раз
 

diversia

Новичок
Данные откуда берутся?
данные CIBlockElement::GetList (Битрикс), сортировка в принципе не проблема. Загвоздка в формировании/выводе массива. Минимум шагов, минимум нагрузки на сервер.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
diversia
В случае с битриксом, стоит забыть о минимуме нагрузки. Это так, оффтоп.

baev дельный совет дал.
 

diversia

Новичок
Более конкретно...
user_id | car_name | car_id
4 | Suzuki Aerio Wagon | 22513
4 | Dodge Durango | 22517
33 | Daewoo Matiz | 22524
42 | Hino hino | 22538
42 | ИЖ 2717 | 22540
44 | Chevrolet Captiva | 22544
44 | Renault Sandero | 22547
44 | Toyota Land Cruiser Prado | 22551
44 | Toyota Land Cruiser | 22555
44 | Subaru Forester | 22558
наполнял так:
PHP:
$arr[$user_id][$car_id]=$car_name;
вывожу:
PHP:
$mess .= "Авто пользователя: <br />";
$x=1;
while ($x <= $user_id):
$y=1;
  while ($y <= $car_id):
    if($arr[$x][$y]){$mess .= $arr[$x][$y]."<br />";$a=1;}
    $y++;
  endwhile;
$x++;
if ($a){print "<br />$mess ...send<br />"; $a=0;}
endwhile;
получаю:
Авто пользователя:
Suzuki Aerio Wagon
Dodge Durango
...send

Авто пользователя:
Suzuki Aerio Wagon
Dodge Durango
Daewoo Matiz
...send

Авто пользователя:
Suzuki Aerio Wagon
Dodge Durango
Daewoo Matiz
Hino hino
ИЖ 2717
...send

Авто пользователя:
Suzuki Aerio Wagon
Dodge Durango
Daewoo Matiz
...
...send
т.е. шагов получаю много (из-за неизвестного числа x/y) - память забиваю. Как правильно заполнить и вывести массив?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
PHP:
$data = '4 | Suzuki Aerio Wagon | 22513
	4 | Dodge Durango | 22517
	33 | Daewoo Matiz | 22524
	42 | Hino hino | 22538
	42 | ИЖ 2717 | 22540
	44 | Chevrolet Captiva | 22544
	44 | Renault Sandero | 22547
	44 | Toyota Land Cruiser Prado | 22551
	44 | Toyota Land Cruiser | 22555
	44 | Subaru Forester | 22558';

//$data = trim($data);

$lines = preg_split('/\\n/', $data);

//print_r($lines);

foreach($lines as $lines){
	list($userId, $car, $carId) = explode('|', trim($lines));
	$arr[trim($userId)][trim($carId)] = trim($car);
}


foreach($arr as $userId=>$container){
	echo 'auto for user ' . $userId . ': <br>';
	echo join(',', array_values($container));
	echo "<br><hr>";
}
На тебе говнокоду бочонок)
 
Сверху