Ассоциативный массив

xsss1

Новичок
Ребят у меня такая ситуация что я могу вывести массив функцией print_r(), для проверки, но если мне нужно взять отдельные элемент массива написав его ключ, $user["password"], не могу его получить - его нет совсем,ничего не выводит. Попробовал просто так перебрать и вывести все значения массива с помощью foreach - на странице мне показало только <0 = Array. С чем это может быть связано?Массив берется из бд запросом. Объясните кто может.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если массива "нет" - либо не так берешь, либо его не и в самом деле. Код покажи
 

xsss1

Новичок
По MVC.
db.php


функция select

PHP:
  private function select($table_name, $fields/*список полей*/, $where ="",/*предикат по умолчанию нет*/ $order ="",/*сортировка*/$up=true, /*по возростанию или убыванию*/$limit =""/*кол ва записей для выборки */ ){

        for ($i = 0; $i < count($fields); $i++){/* Перебираем все поля */
        
            if((strpos($fields[$i], "(") === false) && ($fields[$i] != "*")){  $fields[$i] = "`".$fields[$i]."`";
            }  }
        
            $fields = implode(",",$fields);  /* Масссив в строку с запятой */
            $table_name=$this->config->db_prefix.$table_name;//лезит в классс, берет lesson_
          
            if (!$order) $order = "ORDER BY  `id`";//ORDER ПОЗВОЛЯЕТ СОРТИРОВАТЬ по айди
          
            else {
                if ($order != "RAND()"){    /* вывести не случайные записи */
                    $order = "ORDER BY `$order`";/* конкретное поле */
                    if (!$up) $order .= " DESC"; //типа сортировать по убыванию...
                }
                else $order = "ORDER BY $order" ; /* вывести случайне записи */
            }
          
            if ($limit) $limit = "LIMIT $limit";/* Указываем лимит выборки */
            if ($where) $query =  "SELECT  $fields FROM $table_name WHERE $where $order $limit " ;/* Конкретный запрос с условием */
          
            else $query = "SELECT $fields FROM $table_name $order $limit";/* если нет условия то пищим просто без where */
            $result_set = $this->query($query); /* вообщем приводим в действие этот запрос */
            /* проеоброзовать в двумерный массив этот запрос*/
            if (!$result_set) return false;/* если ошибка то фолс */
            $i = 0;
            /* вставляем массив */
            while ($row = $result_set->fetch_assoc()){
            
                $data[$i] = $row;//сформировали двумерный массив
                $i++;
            }
            $result_set->close();/* закрываем */
            return $data;
    
    }
функция getField


PHP:
public function getField($table_name, $field_out,/* поле,которое нам нужно вернуть */ $field_in,/* известное поле */ $value_in/* значение поля */) {
            $data = $this->select($table_name, array($field_out), " `$field_in`='".addslashes($value_in)."'");
            if(count($data) != 1) return false ;  //или не корректно исользовать здесь функцию,т.к 1,или вообще кароч
            return $data[0][$field_out];
        }
функция возвращает запись целиком

PHP:
public function getElementOnID($table_name,$id){
          //  if (!$this->existsID($table_name, $id)) return false ;//проверка на корректность Id
        
            return $this->select($table_name, array("*"), "`id` = '$id'");
      
        }

в globalclass


PHP:
protected function getField($field_out/*то поля которое нужно получить*/, $field_in/*входное поле*/, $value_in/*его значение*/){
        return $this->db->getField($this->table_name,$field_out, $field_in, $value_in);
    }



/*получает всю запись целиком по айди*/
    public function get($id){
        return $this->db->getElementOnID($this->table_name, $id);
    }

ну и собственно в юзер классе

PHP:
public function getUserLogin($login){
    
        $id = $this->getField("id", "login" ,$login);
        //echo print_r($this->get($id));
        return $this->get($id);//получаем всю запись целиком ,зная уже ее id
    
    }
вот get и возвращает мне вроде запись целиком, но только видно это через функцию print_r.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если честно, то в этом звездеце даже разбираться неохота. Куча дырок в SQL, совершенно непонятная структура методов, ничего общего с упомянутым MVC не умеющая. Мне кажется, что надо заняться отладкой, постепенно вставлять по ходу работы приложения print_r, начиная от getUserLogin, далее внутрь кода.

PS:
вот get и возвращает мне вроде запись целиком, но только видно это через функцию print_r.
так вроде или нет? print_r($this->get($id)); выводит что-то?
 

xsss1

Новичок
ДА я знаю что я не так делаю, думаю мои опровдания будут все равно не к месту.... Да выводит Array ( [0] => Array ( [id] => 98 [login] => asd [password] => de2ed28e3c1dd462dcc6cd8a8e138dab [regdate] => 1398587295 ) ) .... а если я захочу обратится конкретно к какому то полю, не выводит . Типа $user=($this->get($id);/ а потом echo $user["password"];
 

xsss1

Новичок
c0dex,да, я впринципе начудил отправив столько текста ненужного. Может так будет понятней

PHP:
private function select($table_name, $fields/*список полей*/, $where ="",/*предикат по умолчанию нет*/ $order ="",/*сортировка*/$up=true, /*по возростанию или убыванию*/$limit =""/*кол ва записей для выборки */ ){
        for ($i = 0; $i < count($fields); $i++){/* Перебираем все поля */
           
            if((strpos($fields[$i], "(") === false) && ($fields[$i] != "*")){  $fields[$i] = "`".$fields[$i]."`";
            }  }
           
            $fields = implode(",",$fields);  /* Масссив в строку с запятой */
            $table_name=$this->config->db_prefix.$table_name;//лезит в классс, берет lesson_
           
            if (!$order) $order = "ORDER BY  `id`";//ORDER ПОЗВОЛЯЕТ СОРТИРОВАТЬ по айди
           
            else {
                if ($order != "RAND()"){    /* вывести не случайные записи */
                    $order = "ORDER BY `$order`";/* конкретное поле */
                    if (!$up) $order .= " DESC"; //типа сортировать по убыванию...
                }
                else $order = "ORDER BY $order" ; /* вывести случайне записи */
            }
           
            if ($limit) $limit = "LIMIT $limit";/* Указываем лимит выборки */
            if ($where) $query =  "SELECT  $fields FROM $table_name WHERE $where $order $limit " ;/* Конкретный запрос с условием */
           
            else $query = "SELECT $fields FROM $table_name $order $limit";/* если нет условия то пищим просто без where */
            $result_set = $this->query($query); /* вообщем приводим в действие этот запрос */
            /* проеоброзовать в двумерный массив этот запрос*/
            if (!$result_set) return false;/* если ошибка то фолс */
            $i = 0;
            /* вставляем массив */
            while ($row = $result_set->fetch_assoc()){
               
                $data[$i] = $row;//сформировали двумерный массив
                $i++;
            }
            $result_set->close();/* закрываем */
            return $data;
       
    }
  public function getElementOnID($table_name,$id){
          //  if (!$this->existsID($table_name, $id)) return false ;//проверка на корректность Id
          $us=$this->select($table_name, array("*"), "`id` = '$id'");
          //  print_r($us);
        foreach($us as $k =>$v){
        $i++;
        echo "Цикл сработал $i раз <br/>";
        echo "<$k = $v ";
       
      }
            return $this->select($table_name, array("*"), "`id` = '$id'");
       
        }
Print_r работает в функции getElementOnID(). А вот пересчитать и вывести что там форейчем не получаеться и взять отдельный элемент по ключу тоже не получаеться.СОбственно та проблема, которую я пытался описать
 

riff

Новичок
Array ( [0] => Array (
Ни на что не намекает?

P.S. Чего-то не корректно я влез с ответом. c0dex, извини.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что выводит код print_r($us); в методе getElementOnID()?
 

xsss1

Новичок
c0dex, Array ( [0] => Array ( [id] => 98 [login] => asd [password] => de2ed28e3c1dd462dcc6cd8a8e138dab [regdate] => 1398587295 ) ) выводит функция print_r($us). Я ее просто перед отправкой закоментил.
 

xsss1

Новичок
riff,ТО что print_r выводит начало Array ( [0] мне не о чем не говорит. А должно? Ты если что скажи
 

riff

Новичок
Ау, у тебя ответ перед глазами. Читай вслух дословно.
Через пять минут не поймёшь, скажу.
 
Последнее редактирование:

xsss1

Новичок
riff, я пошел на простор интернета и прочитал что значит функция print_r - выводит количество элементов в массиве. 0. а как тогда дальше,этой же функцией он показывает остальной массив?.... ИЛи это вообще двумерный массив? Где Array 0 показывает свой вложенный?
 

riff

Новичок
Учимся читать: массив содержит в качестве первого элемента массив, который содержит перечень 'id, 'password', ...
короче, у тебя, в данном случае $u[0]['password']
 

xsss1

Новичок
Спасибо большое!. Мда)). Сидел тут, мучился.Нужно было раньше на форуме регистрироваться...
 
Сверху