ФорумПрограммированиеPHP для идиотов → Отсеить лишнии значения[foreach]

Отсеить лишнии значения[foreach]

  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 7 апреля 2009 г. 20:54

    $sql="SELECT `id`, `name`, `razdel` FROM `article`";
    $result = mysql_query($sql);
    for($k=0,$article=array();$art = mysql_fetch_array($result);$k++) {
      $article[$k] = $art;
    }
    $res= '
    <ul id="article_list">
    ';
    foreach($article as $k=>$arr) {
               $razd=$arr['razdel'];
          $res=$res.'<li>'.$arr['razdel'].'<ul>';
      foreach($article as $k=>$arr2) {
               if($arr2['razdel'] == $razd) {
                   $res=$res.'<li><a href="?article='.$arr2['id'].'" title="'.$arr2['title'].'" >'.$arr2['title'].'</a></li>';
               }
           }
           $res=$res.'</ul></li>';

    }
    $res=$res.'</ul>';
    echo $res;

    получаю:
    site
      Продажа камней.
      Контакты
    site
      Продажа камней.
      Контакты
    site23
      Продажа!!

    Как убрать повторение списка site, если бы список site содержал бы в себе 3 статьи, то он бы повторился три раза и так далее для каждого списка.
    Пробывал do … while не помогло…
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 7 апреля 2009 г. 22:18, спустя 1 час 24 минуты 4 секунды

    array_unique
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 7 апреля 2009 г. 22:34, спустя 16 минут 28 секунд

    ага спасибо… а ведь читал про эту функцию, как их запоминать? *wall*
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 8 апреля 2009 г. 2:59, спустя 4 часа 25 минут 11 секунд

    mario
    $res=$res.'<li>'.$arr['razdel'].'<ul>';
    Хреновый метод. Нужно использовать не переопределение значения, а присвоение (добавление) к переменной.

    Если уже определена переменная $res (она у тебя выше цикла уже определена), то в цикле юзаем:
    $res .= '<li>'.$arr['razdel'].'<ul>';

    если не определена, то перед циклом нужно её определить. Но в цикле главное не забывать про "." (точку - добавление к переменной, не математическое).
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 8 апреля 2009 г. 3:50, спустя 50 минут 31 секунду

    Givi, ага, я так и делал, просто то самый первый кусок кода… уже исправил :)
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 4:57, спустя 1 час 7 минут 11 секунд

    чтоб у тебя с таким подходом ConcurrentModificationException вылазил всегда
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 6:03, спустя 1 час 5 минут 58 секунд


    а ведь читал про эту функцию, как их запоминать? *wall*
    А их не надо специально запоминать, просто когда возникает задача надо просмотреть список на предмет поиска подходящей …
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 7:43, спустя 1 час 39 минут 59 секунд


    чтоб у тебя с таким подходом ConcurrentModificationException вылазил всегда
    это из какой оперы? не разу не видел такое))) ява?
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 8:27, спустя 44 минуты 18 секунд

    да
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 8:34, спустя 6 минут 11 секунд

    CTAPbIu_MABP, типа одновременная попытка изменить объект? с многопоточностью бывает такое? c# вроде как такие ситуации сам отслеживает, хотя может я путаю. не сталкивался одним словом
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 9:53, спустя 1 час 19 минут 25 секунд

    это когда через итератор итеририруешь и пытаешься что-то поменять
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 10:22, спустя 28 минут 57 секунд


    это когда через итератор итеририруешь и пытаешься что-то поменять
    ааа понял. сталкивался кажется .. ))
    Сапожник без сапог
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 8 апреля 2009 г. 10:22, спустя 32 секунды

    только не в яве, но помню подобную ситуацию не очень давно … вот только где ?!
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 9 апреля 2009 г. 4:05, спустя 17 часов 42 минуты 21 секунду

    $sql="SELECT * FROM `article`";
    $result = mysql_query($sql);
    for($k=0,$article=array();$art = mysql_fetch_array($result);$k++) {
    $article[$k] = $art;
    }
    $res= '
    <ul id="article_list">
    ';
    $sql1="SELECT `razdel` FROM `article`";
    $res=mysql_query($sql1);
    for($k=0,$spisok=array();$spis = mysql_fetch_array($res);$k++) {
    $spisok[$k] = $spis;
    }

    $spisog=array_unique($spisok);
    foreach($spisog as $k=>$arg) {
    $razd=$arg['razdel'];
    $res.= '<li>'.$arg['razdel'].'<ul>';
    foreach($article as $k=>$arr) {
    if ($arr['razdel']==$razd)
    {
    $res.='<li><a href="?article='.$arr['id'].'" title="'.$arr['title'].'" >'.$arr['title'].'</a></li>';
    }
    }
    $res.='</ul></li>';
    }
    $res.='</ul>';

    функция array_unique убирает повторяющиеся элементы массива, но вот как то в моём случаи она неправильно убирает… :(
    массивы:
    $spisok=Array ( [0] => Array ( [0] => site [razdel] => site ) [1] => Array ( [0] => site [razdel] => site ) [2] => Array ( [0] => site2321 [razdel] => site2321 ) [3] => Array ( [0] => site [razdel] => site ) [4] => Array ( [0] => goo [razdel] => goo ) );

    $spisog=Array ( [0] => Array ( [0] => site [razdel] => site ) );

    хотя по идеи должны остаться еще site2321 и goo
    догадка была что нужно использовать в цикле, но что то не получается у меня организовать… :(
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 9 апреля 2009 г. 5:33, спустя 1 час 28 минут 14 секунд

    проблема решена, в мануале для функции array_unique описано решение для вложенных массивов.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!