Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Разобрать многомерный массив


Автор: Shark 20.9.2015, 09:20
Есть функци (не моя):
Код

        private $result=array();
        public function getResult()
            { return $this->result; }
        

        public function select_all($table, $row, $where, $order)
            {
                
                $selects=mysql_query("SELECT ".$row." FROM ".$table." ".$where." ".$order) or die(mysql_error());
                if($selects)
                    {
                        $this->numResults=mysql_num_rows($selects);
                        for($i = 0; $i < $this->numResults; $i++)
                            {
                                $results = mysql_fetch_array($selects);
                                $key = array_keys($results);
                                for($x = 0; $x < count($key); $x++)
                                    {
                                        if(!is_int($key[$x]))
                                            {
                                                if(mysql_num_rows($selects) > 1)
                                                    { $this->result[$i][$key[$x]] = $results[$key[$x]]; }
                                                else if(mysql_num_rows($selects) < 1)
                                                    { $this->result = null; }
                                                else
                                                    { $this->result[$key[$x]] = $results[$key[$x]]; }
                                            }
                                    }
                            }
                        return true;
                    }
            }

далее в index.php пишется следующее:
Код

$db -> connect();

$template = $db -> select_all('s_server_template', '*', '', '');
$result = $db->getResult();
echo "<pre>";
print_r ($result);
echo "</pre>";

На выходе получаем это:
Код

Array
(
    [0] => Array
        (
            [id_template] => 1
            [name_template] => Default
            [url_template] => template/default/
            [template_css] => css/template_css/default/
            [img_template] => images/template/default/
        )

    [1] => Array
        (
            [id_template] => 2
            [name_template] => Default1
            [url_template] => template/default/1
            [template_css] => css/template_css/default/1
            [img_template] => images/template/default/1
        )

)

Как его разобрать на части и нужные строки воткнуть в нужные мне места?

Автор: Xenox 21.9.2015, 10:08
Хм ну например так:

Код

<img src="" . <?= $result[0][img_template] ?> . "example.png" />

получишь картинку которая лежит images/template/default/example.png

Смотря что ты хочешь получить

Автор: Shark 21.9.2015, 10:24
Спасибо за помощь, но это я знаю..
я имел ввиду вывести всё, т.е.
справа на странице список шаблонов будет (это пример).. если я напишу так:
Код

echo $result[0][img_template];

то название будет только из первой строки в БД или из последней (в зависимости от сортировки)..
Как я понимаю, тут вроде бы надо использовать цикл foreach(), где в [0] будут вставляться все ключи(записи), но и это мне не подходит, т.к. постоянно писать в разных частях страницы foreach() неудобно и громоздко.
Фактически должно получиться что-то типо 
Код

while($result=mysql_fetch_arra($res))
{
   echo $result['name_template'];
....
}

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

Автор: Shark 23.9.2015, 11:08
на текущий момент проблему решил так:
Код

$result = $db->getResult();
$key = array_keys($result);
for($i=0; $i<count($key); $i++)
    {    
        if(is_int($key[$i]))
            {
                echo $result[$i]['name_template']
            }
    }

Начало всей головной боли smile
Код

        private $result=array();
        public function getResult()
            { return $this->result; }
        //Функция выборки из БД
        public function select_all($row, $table, $where, $order)
            {
                
                $selects=mysql_query("SELECT ".$row." FROM ".$table." ".$where." ".$order) or die(mysql_error());
                if($selects)
                    {
                        $count=mysql_num_rows($selects);
                        for($i = 0; $i < $count; $i++)
                            {
                                $results = mysql_fetch_array($selects);
                                $key = array_keys($results);
                                for($x = 0; $x < count($key); $x++)
                                    {
                                        if(!is_int($key[$x]))
                                            {
                                                if(mysql_num_rows($selects) > 1)
                                                    { $this->result[$i][$key[$x]] = $results[$key[$x]]; }
                                                else if(mysql_num_rows($selects) < 1)
                                                    { $this->result = null; }
                                                else
                                                    { $this->result[$i][$key[$x]] = $results[$key[$x]]; }
                                            }
                                    }
                            }
                        return true;
                    }
            }

после него пишу дальше 2 функции
Код

        private $view="";
        public function getView()
            { return $this->view; }
            
        public function select_view($rows)
            {
                $key = array_keys($this->result);
                for($i=0; $i<count($key); $i++)
                    {    
                        if(is_int($key[$i]))
                            {
                                $this->view[$i][$rows]=$view[$i][$rows];
                            }
                    }
                return true;
            }

При запросе индексовом файле
Код

$view_select = $db->getView();
echo "<pre>";
print_r ($view_select);
echo "</pre>";

ничего не выводится... что я опять не так сделал?

Автор: Shark 24.9.2015, 10:15
Сам затупил просто. На текущий момент вопрос решен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)