Project
Есть несколько записей в мускле. У каждой записи есть ID который при создании новой строки автоматом назначается по порядку. Все бы хорошо, но некоторые строки были удалены и соответственно ID-шники уже идут не по порядку, а с пропусками.
Все эти записи пишутся в многоуровневый массив.
Задача: вывести из этого массива все данные построчно.
Делал циклом с помощью "for", но из-за пробелов в ID-шниках выходит шняга...
В инете ничего подходящего не нашел...
Ailk
если на пыхе скрипт, то гугли циклы foreach.
примерно это будет выглядеть так (рекурсивный метод вывода многоуровневого массива):
function display_arr($arr, $pid)
{
$html = '';
foreach ($arr as $row)
{
if ($row['pid'] == $pid)
{
$html .= '<li>' . "\n";
$html .= ' ' . $row['name'] . "\n";
$html .= ' ' . display_arr($arr, $row['id']);
$html .= '</li>' . "\n";
}
}
return $html ? '<ul>' . $html . '</ul>' . "<br />\n" : '';
}
$arr = array(
array('name' => 'Каталог', 'id' => 1, 'pid' => 0),
array('name' => 'Главная', 'id' => 2, 'pid' => 1),
array('name' => 'Резерв1', 'id' => 3, 'pid' => 1),
array('name' => 'Резерв2', 'id' => 4, 'pid' => 1),
array('name' => 'Товар', 'id' => 5, 'pid' => 0),
array('name' => 'Резерв1', 'id' => 6, 'pid' => 5),
array('name' => 'Резерв2', 'id' => 7, 'pid' => 5),
array('name' => 'Резерв3', 'id' => 8, 'pid' => 5),
array('name' => 'Уровень 3', 'id' => 9, 'pid' => 0),
array('name' => 'Уровень 3.1', 'id' => 10, 'pid' => 8),
array('name' => 'Уровень 3.2', 'id' => 11, 'pid' => 8),
array('name' => 'Уровень 3.3', 'id' => 12, 'pid' => 8),
);
echo display_arr($arr, 0);
AWD
Project писал:
Хыхы. Ребят, спасибо, но в этой функции я так и не разобрался, за-то решил вопрос немного по другому.
Все равно, всем спасибо за совет! Оценил.
а что там разбираться?
foreach проходит по всем элементам массива, даже, как ты сказал "многоуровневого"
- многомерного.
$arr = array(1, 'hardcore', 'teen');
$arr = array(3, 'blowjob', 'mature');
foreach($arr as $key=>$val) {
echo $key; //в 1-ю итерацию выведет 0, во 2-ю 1
//$key - ключ, если нужен. если не нужен - то просто ($arr as $val)
echo $val[0]; //в 1-ю итерацию выведет 1, во 2-ю 3
echo $val[1]; //в 1-ю итерацию выведет 'hardcore', во 2-ю 'blowjob'
echo $val[2]; //в 1-ю итерацию выведет 'teen', во 2-ю 'mature'
}
for each - для каждого. то есть, функция будет перебирать массив и возвращать каждый его элемент в $val, пока не будет достигнут конец массива.