Форум → Программирование → PHP для идиотов → PHP и массив объектов
PHP и массив объектов
Страницы: ← Следующая страница →
-
Привет, может кто знает, как можно сделать следующее:
Имеем следующую структуру в базе данных:
ID | Parent | Name
———————————————
1 | 0 | Category One
2 | 1 | Subcategory One
3 | 0 | One more category
4 | 2 | Sub-sub category
… и т.д.
Мне нужен PHP класс, который данную таблицу сериализует в следующий
формат:
[
{
"Name" : "Category One",
"ID" : 1,
"Children" : [
{
"Name" : "Subcategory One",
"ID" : 2,
"Children" : …
}
]
},
{
"Name" : "One more category",
"ID" : 3,
"Children" : [ ]
}
]
т.е. массив объектов, в каждом из которых есть массив дочерних элементов, т.е. рекурсивная модель. -
12 июля 2008 г. 0:01, спустя 1 час 38 минут 35 секунд
По-моему скромному мнению, сначала придется рукурсивно заполнить массив, а потом уже перевести его в строку соответствии с указанным стилем.
Делов на час максимум :) -
-
-
-
-
20 ноября 2009 г. 16:53, спустя 494 дня 1 час 13 минут
Всем здрасте!
Есть нубо-класс:class class_rubric {
public $id_rubr;
public $rubr_name;
public $rubr_port_count;
public function getLink() {
return "<A HREF=\"".$_SERVER['PHP_SELF']."?id_rubric=".$this->id_rubr."\">".$this->rubr_name." (".$this->rubr_port_count.")</A>";
}
есть функция:// функция возвращает список рубрик
function getRubric() {
$tmp= new class_mysql;
$tmp->open();
$sql = "
SELECT Port_Rubric.Id_rubric, Port_Rubric.Rubric_Name, COUNT(*) as CNT
FROM Portfolio, Port_Rubric
WHERE
Port_Rubric.Id_Rubric = Portfolio.Id_rubric
GROUP BY
Port_rubric.Id_rubric,
Port_rubric.Rubric_name;";
global $rubric;
$rubric[] = new class_rubric;
$array = $tmp->query($sql, 0);
if (is_array($array)) {
$i = 0;
foreach($array as $obj) {
$rubric[$i]->id_rubr = $obj->Id_rubric;
$rubric[$i]->rubr_name = $obj->Rubric_Name;
$rubric[$i]->rubr_port_count = $obj->CNT;
$i++;
}
} else {
$result = false;
}
unset($sql);
unset($obj);
unset($array);
unset($tmp);
return $rubric;
}
хотелось бы каким то грамотным способом выводить их на страницу,
используя вот такой код:getRubric();
for($i=0;$i < count($rubric); $i++){
echo $rubric[$i]->getLink();
}
выходит ошибка:
Fatal error: Call to undefined method stdClass::getLink()
подскажите как правильно реализовать массив классов ? -
20 ноября 2009 г. 16:57, спустя 4 минуты 10 секунд
код - жепь…..for($i=0;$i < count($rubric); $i++){
echo $rubric[$i]->getLink();
}
начнем хотябы с того , что тут стоит делать foreachglobal $rubric;
$rubric[] = new class_rubric;
это вообще антипаттерн какойто….
и обьясни мне суть вот этого класса :class class_rubric {
public $id_rubr;
public $rubr_name;
public $rubr_port_count;
public function getLink() {
return "<A HREF=\"".$_SERVER['PHP_SELF']."?id_rubric=".$this->id_rubr."\">".$this->rubr_name." (".$this->rubr_port_count.")</A>";
} -
20 ноября 2009 г. 16:57, спустя 37 секунд
$rubric[] = new class_rubric; // ЭТО
$array = $tmp->query($sql, 0);
if (is_array($array)) {
$i = 0;
foreach($array as $obj) {
// НАДО ДЕЛАТЬ ТУТ
$rubric[$i]->id_rubr = $obj->Id_rubric;https://smappi.org/ - платформа по созданию API на все случаи жизни -
20 ноября 2009 г. 17:01, спустя 4 минуты 1 секунду
fresh, без обид, но говнокод у тебя дикий….
вот тут например, зачем ты сетаешь false в переменную $result ??????if (is_array($array)) {
$i = 0;
foreach($array as $obj) {
$rubric[$i]->id_rubr = $obj->Id_rubric;
$rubric[$i]->rubr_name = $obj->Rubric_Name;
$rubric[$i]->rubr_port_count = $obj->CNT;
$i++;
}
} else {
$result = false;
} -
20 ноября 2009 г. 17:08, спустя 6 минут 53 секунды
код - жепь…..
Я еще совсем нубас который учится, не ругайся насяльника)
начнем хотябы с того , что тут стоит делать foreach
так?foreach($rubric as $element) {
$element->getLink();
}
это вообще антипаттерн какойто….
тут уберу глобал, в основном документе сделаю $Rubr = getRubric();
и обьясни мне суть вот этого класса :
public $id_rubr; // код рубрики
public $rubr_name; // название рубрики
public $rubr_port_count; // количество документов в данной рубрике
Хочу сделать что б выводилось в виде:
Рубрика 1 (3)
Рубрика 2 (14)
Рубрика 3 (4)
…
Рубрика N (X) -
20 ноября 2009 г. 17:13, спустя 4 минуты 50 секунд
Хочу сделать что б выводилось в виде:
Рубрика 1 (3)
Рубрика 2 (14)
Рубрика 3 (4)
…
Рубрика N (X)
ну что ты хочешь сделать я понял из твоего кода….
просто зачем тут класс ??? -
20 ноября 2009 г. 17:17, спустя 3 минуты 47 секунд
Ну как минимум познакомиться с классами, что это и как их вкуснее приготовитьХочу сделать что б выводилось в виде:
Рубрика 1 (3)
Рубрика 2 (14)
Рубрика 3 (4)
…
Рубрика N (X)
ну что ты хочешь сделать я понял из твоего кода….
просто зачем тут класс ??? -
20 ноября 2009 г. 17:24, спустя 7 минут 25 секунд
ну раз хочется познакомится с классами, то пробуй по крайней мере хотя бы так….<?php
class Rubric
{
protected $_dbObject; // your database adapter (in your case it's "class_mysql")
/**
* Retrieve all rubrics
*
* @return array
*/
public function getAllRubrics()
{
$this->_dbObject->run($yourSqlQuery); // run your query
return $this->_dbObject->fetchAssoc(); //fetch result into array (or assoc. array)
}
/**
* Retrieve rubrics links as array
*
* @return array
*/
public function getAllRubriksLinks()
{
$rubrics = array();
foreach ($this->getAllRubrics() as $item) {
$rubrics[] = '<a href="' . $item['href'] . '">' . $item['title'] . ' (' . $item['count'] . ')</a>';
}
return $rubrics;
}
}
это далеко не самый идеальный вариант… -
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!