Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Угадайте как оно работает?
Форумы портала PHP.SU » » Юмор » Угадайте как оно работает?

Страниц (1): [1]
 

1. Самогонщик - 08 Января, 2012 - 20:33:11 - перейти к сообщению
Суть: на сайте есть иерархические категории неограниченной вложенности, хранятся в виде ид и парентИд. При загрузке страницы выгружаются все целиком (не страшно, т.к. всё равно берутся из кэша). И для получения всех подкатегорий есть метод
PHP:
скопировать код в буфер обмена
  1. function get_sub_cats($id, $subcategory = false) {
  2.         global $cat_info;
  3.         $subfound = array ();
  4.        
  5.         if( ! $subcategory ) {
  6.                 $subcategory = array ();
  7.                 $subcategory[] = $id;
  8.         }
  9.        
  10.         foreach ( $cat_info as $cats ) {
  11.                 if( $cats['parentid'] == $id ) {
  12.                         $subfound[] = $cats['id'];
  13.                 }
  14.         }
  15.        
  16.         foreach ( $subfound as $parentid ) {
  17.                 $subcategory[] = $parentid;
  18.                 $subcategory = get_sub_cats( $parentid, $subcategory ); <--WTF??!
  19.         }
  20.        
  21.         return $subcategory;
  22. }


Вот оно как то работает, но логика работы с тем что хотел когда то написать автор явно не сходится Улыбка

Но на данный момент меня мучает вот какой вопрос: а оно работает правильно?
(Добавление)
Вот ещё бесчеловечно на вскидку переписанная версия:
PHP:
скопировать код в буфер обмена
  1.  
  2. function get_sub_cats($id, $subcategory = false) {
  3.   for($isContinue = false; $isContinue; $isContinue = false)
  4.   {
  5.     foreach ($cat_info as $cat)
  6.       if( in_array($cat['parentid'], $allow_cats) && !in_array($cat['id'], $allow_cats) )
  7.       {
  8.         $allow_cats[] = $cat['id'];
  9.         $isContinue = true;
  10.       }
  11.    }
  12. }
  13.  
Кто лучше?
2. OrmaJever - 08 Января, 2012 - 20:37:38 - перейти к сообщению
а что в переменой $cat_info ?
3. PATCH - 08 Января, 2012 - 20:43:28 - перейти к сообщению
Но на данный момент меня мучает вот какой вопрос: а оно работает правильно? - а ты проверь)
4. Самогонщик - 08 Января, 2012 - 20:51:19 - перейти к сообщению
OrmaJever пишет:
а что в переменой $cat_info ?
Ассоциативный массив: ид категории => ассоциативный массив строк из бд таблицы категории. В строках из бд самое интересное это ид и парентИд.

Поковырял ещё, нашёл вторую реализацию, которая реально и используется
PHP:
скопировать код в буфер обмена
  1. function get_sub_cats($id, $subcategory = '') {
  2.        
  3.         global $cat_info;
  4.         $subfound = array ();
  5.        
  6.         if( $subcategory == '' ) $subcategory = $id;
  7.        
  8.         foreach ( $cat_info as $cats ) {
  9.                 if( $cats['parentid'] == $id ) {
  10.                         $subfound[] = $cats['id'];
  11.                 }
  12.         }
  13.        
  14.         foreach ( $subfound as $parentid ) {
  15.                 $subcategory .= "|" . $parentid;
  16.                 $subcategory = get_sub_cats( $parentid, $subcategory );
  17.         }
  18.        
  19.         return $subcategory;
  20. }
То ли эта переписанная версия той, то ли та переписанная версия этой. Но эта хотя бы правильно работает.
(Добавление)
PATCH пишет:
Но на данный момент меня мучает вот какой вопрос: а оно работает правильно? - а ты проверь)
*читать пафосным голосом*
Наш внутренний компилятор/интерпретатор должен давать ответы на такие вопросы без проверки .
5. DeepVarvar - 27 Июля, 2013 - 04:36:04 - перейти к сообщению
Привезли новую бензопилу. Рабочие испытывают. Положили ветку, пила справилась:
— У, <нехорошее слово>!
Положили лист фанеры, пила справилась:
— У, <нехорошее слово>!
Положили доску, пила справилась:
— У, <нехорошее слово>!
Положили бревно, пила справилась:
— У, <нехорошее слово>!
Положили под пилу рельс. Цепь лопнула, кровь-кишки.
— А, <нехорошее слово>!

 

Powered by ExBB FM 1.0 RC1