Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как заполнить двумерный массив?
 
 автор: OLi   (09.07.2011 в 15:22)   письмо автору
 
 

Если в цикле получаю значения $row[id] и $row[par]
Надо создать массив вид $row[id]=>$row[par]
Чтоб потом можно было вывести все $row[id] и $row[par]

  Ответить  
 
 автор: cheops   (09.07.2011 в 15:28)   письмо автору
 
   для: OLi   (09.07.2011 в 15:22)
 

А это часом не одномерный массив получается (если значения $row[id] уникальны)?
$arr[$row[id]] = $row[par];
Если значений id - много и им соответствуют разные значения par, тогда двумерный массив можно сформировать так
$arr[$row[id]][] = $row[par];

  Ответить  
 
 автор: OLi   (09.07.2011 в 16:17)   письмо автору
 
   для: cheops   (09.07.2011 в 15:28)
 

А выводить как вместе с ключом? и делать проверку ключа? Отобразить и ключ и значение
Да- одномерный получается...

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:28)   письмо автору
 
   для: OLi   (09.07.2011 в 16:17)
 

Лучше всего воспользоваться foreach
<?php
  
foreach($arr as $id => $par)
  {
    echo 
"ключ - $id, значение - $par<br>";
  }
?>

  Ответить  
 
 автор: OLi   (09.07.2011 в 19:13)   письмо автору
 
   для: cheops   (09.07.2011 в 16:28)
 

А если ко всему этому $arr[$row[id]] = $row[par]; надо еще добавить $row[name]?
Это уже двумерный будет, насколько я понял?

  Ответить  
 
 автор: cheops   (09.07.2011 в 19:18)   письмо автору
 
   для: OLi   (09.07.2011 в 19:13)
 

Да, тогда лучше создавать двумерный массив
$arr[$row[id]]['par'] = $row['par'];
$arr[$row[id]]['name'] = $row['name'];

  Ответить  
 
 автор: OLi   (09.07.2011 в 19:23)   письмо автору
 
   для: cheops   (09.07.2011 в 19:18)
 

И как его просмотреть? чтоб сохранилось соответствие id name par

  Ответить  
 
 автор: cheops   (09.07.2011 в 19:34)   письмо автору
 
   для: OLi   (09.07.2011 в 19:23)
 

Точно также, только теперь $par сам является массивом с элементами $par['par'] и $par['name'].

  Ответить  
 
 автор: OLi   (09.07.2011 в 19:39)   письмо автору
 
   для: cheops   (09.07.2011 в 19:34)
 

Не могу представить...получается 2 foreach ?

  Ответить  
 
 автор: Valick   (09.07.2011 в 19:42)   письмо автору
 
   для: OLi   (09.07.2011 в 19:39)
 

может обрисуете задачу более детально? покажите запрос и расскажите как и что нужно вывести, а то может и не нужны тут лишние телодвижения с массивом.

  Ответить  
 
 автор: cheops   (09.07.2011 в 19:45)   письмо автору
 
   для: OLi   (09.07.2011 в 19:39)
 

Не обязательно, у вас же не очень много элементов, можно прямо так к ним обратиться по ключам
<?php 
  
foreach($arr as $id => $par
  { 
    echo 
"ключ - $id, значение - $par[par], другое значение - $par[name]<br>"
  } 
?>

  Ответить  
 
 автор: OLi   (09.07.2011 в 23:28)   письмо автору
 
   для: cheops   (09.07.2011 в 19:45)
 

Что-то ничего не вывел:
while (($mn = $db->get_row($result)) > 0) {
        
$arr[$row[id]]['parentid'] = $row['parentid']; 
$arr[$row[id]]['name'] = $row['name'];
        
            
            
        }
        
        foreach($arr as $id => $parentid)  
  { 
  echo "ключ - $id, значение - $par[par], другое значение - $par[name]<br>";
  
  /*    if ($_POST['cat'] == $mn['id']) {
                $cat .= '<option selected="selected" value="'.$mn["id"].'">->'.htmlspecialchars($mn["name"]).'</option>';
            } elseif($mn['parentid']==0) {
                $cat .= '<option value="'.$mn["id"].'">'.htmlspecialchars($mn["name"]).'</option>';
            }
        */
  
    
  } 

  Ответить  
 
 автор: OLi   (09.07.2011 в 23:36)   письмо автору
 
   для: OLi   (09.07.2011 в 23:28)
 

Опишу задачу - надо вывести все элементы массива (name) и при этом делать проверку на parentid>0 если да то выводить сразу name элементов где parentid=id
1 Т-е
2 Bus -->parentid 3
3 Auto
4 Keep

-----
Cписок должен преобразоваться в:
1 Т-е
2 Auto
    - Bus 
3 Keep

  Ответить  
 
 автор: cheops   (10.07.2011 в 13:28)   письмо автору
 
   для: OLi   (09.07.2011 в 23:28)
 

Так у вас в foreach $parentid, а не $par - где-то нужно изменить значение.

  Ответить  
 
 автор: OLi   (10.07.2011 в 14:04)   письмо автору
 
   для: cheops   (10.07.2011 в 13:28)
 

Я ведь выше код написал...

  Ответить  
 
 автор: cheops   (10.07.2011 в 14:07)   письмо автору
 
   для: OLi   (10.07.2011 в 14:04)
 

Ну... я про него и говорю - он написан неправильно, в цикле используется переменная с одним именем, а в выводе - с другим.

  Ответить  
 
 автор: sl1p   (10.07.2011 в 15:27)   письмо автору
 
   для: OLi   (10.07.2011 в 14:04)
 

и здесь ещё)

while (($mn = $db->get_row($result)) > 0) {
        
$arr[$row[id]]['parentid'] = $row['parentid']; 
$arr[$row[id]]['name'] = $row['name']; 



$row заменить на $mn

зы. и странное условие какоето в while вы получаете массив с данными и сравниваете его с числом..

  Ответить  
 
 автор: OLi   (10.07.2011 в 15:43)   письмо автору
 
   для: sl1p   (10.07.2011 в 15:27)
 

Сделал так:
foreach($arr as $id => $parentid)  
  { 
 
      if ($_POST['cat'] == $id) {
                $cat .= '<option selected="selected" value="'.$id.'">->'.htmlspecialchars($parentid[name]).'</option>';
            } elseif($parentid[parentid]==0) {
                $cat .= '<option value="'.$id.'">'.htmlspecialchars($parentid[name]).'</option>';
            }
        
  
    
  } 

Надо как-то проверить на $parentid[name]!==0 и выводить всех "детей" по ходу списка

  Ответить  
 
 автор: OLi   (10.07.2011 в 20:03)   письмо автору
 
   для: OLi   (10.07.2011 в 15:43)
 

Тема закрыта - решение нашел

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования