Не получается создать ассоциативный массив

Avron2

Новичок
Вот функция:
PHP:
        public function hasParent($aArray, $id)     { /*Возвращает id родителя*/
            for ($i = 0; $i < count($aArray)-1;$i++)  {
                $current_id = $aArray[$i]['id'];
                if ($current_id == $id)    
                    $aResult = array('id_parent' => $aArray[$i]['id_parent'], 'theme' => $aArray[$i]['theme']);
                    return $aResult;
            }
            
        }
Массив $aResult пуст, хотя $aArray[$i]['id_parent'] и $aArray[$i]['theme'] - это реальные значения, которые я пробовал выводить на экран.
Бьюсь над этим, ничего ведь сложного нет, а не могу понять почему он пуст.
В чем проблема?
 

Avron2

Новичок
И еще вопрос. Эта ф-ция отыскивает в многомерном ассоциативном массиве $aArray[$i]['id'] == $id(которое передали в функцию). Т.е. идет перебор всех строк массива, пока не найдем искомый id.
А как лучше организовать поиск в массиве? Ведь массив может быть 1 000 000 строк и перебор будет тормозить работу сайта.
 

Avron2

Новичок
PHP:
                $db_q = $connect->query("SELECT * FROM ".$this->db);
                if (!$db_q) trigger_error("Не удалось выбрать темы!");
                while ($row = $db_q->fetch_assoc())
                    $arr[] = $row; /*формирование массива из запроса*/
Передается $arr и $id (ид текущей темы форума)
Пример строки массива $arr[]: array('id' => 10, 'id_parent' =>0, 'theme' => Тема форума, 'description' => 'описание темы форума')
Темы форума могут быть вложены друг в друга, поэтому темы представляются в виде дерева (nested sets)
 

Avron2

Новичок
Это я так понимаю и есть ответ на мой вопрос. Тогда передаваемый $id будет индекс массива $aArray
PHP:
   public function hasParent($aArray, $id)     { /*Возвращает id родителя*/
                    $aResult = array('id_parent' => $aArray[$id]['id_parent'], 'theme' => $aArray[$id]['theme']);
                   return $aResult;
            }
Получается так?
 

Adelf

Administrator
Команда форума
Avron2
Так. Но надо ввести еще проверку на существование ключа в массиве. (можешь почитать недавний треп об этом).

Ну и неправильно называть метод возвращающий родителя hasParent. getParent чтоли хотя бы...
 

Avron2

Новичок
Метод так назван, потому что задумывался как возвращающий ид родителя, а теперь он имеет вид:
PHP:
        public function getDataTheme($aArray, $id)     { /*Возвращает данные темы*/
          $aResult = array('id_parent' => $aArray[$id]['id_parent'], 'theme' => $aArray[$id]['theme']);
                   return $aResult;
        }
Спасибо.
 

Avron2

Новичок
Дело в том, что метод getDataTheme($aArray, $id) будет вызываться из рекурсии.
Один раз выбираются темы форума из БД, а затем рекурсивно мы движемся к следующему родителю темы.
Это все нужно для того, чтобы отобразить путь к текущей подтемы (от корня тем, до текущей темы).
А если при каждом вызове обращаться к БД, то это может отразиться на скорости, тем более что тем может быть очень много.
 
Сверху