Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Объекты и массивы

Сообщения:  [1-10]   [11-17] 

 
 автор: Raffi   (12.07.2008 в 11:53)   письмо автору
 
   для: sms-send   (12.07.2008 в 01:38)
 

Спасибо большое за код!!! сейчас буду думать, как к нему XmlHttpRequest прикрутить

   
 
 автор: sms-send   (12.07.2008 в 03:25)   письмо автору
 
   для: Raffi   (11.07.2008 в 23:47)
 

>и заполнить элемент select с помощью данного массива, вложенность отображая отступами.

Боюсь, что я не о тех отступах подумал :(

   
 
 автор: sms-send   (12.07.2008 в 01:38)   письмо автору
 
   для: Trianon   (12.07.2008 в 00:20)
 

Ок. Исправлюсь :)

   
 
 автор: sms-send   (12.07.2008 в 01:25)   письмо автору
 
   для: Raffi   (12.07.2008 в 00:10)
 

В предыдущем примере слишком много запросов (по запросу для каждой записи), переписал так:


<?php

$q 
mysql_query('SELECT `ID`,`Parent`,`Name` FROM `tbl`');
$table = array();
while(
false !== $fetch mysql_fetch_assoc($q))
{
    
$table[$fetch['ID']] = $fetch;
}
mysql_free_result($q);
$q mysql_query('SELECT `Parent`,GROUP_CONCAT(`ID`) AS `ids` FROM `tbl` GROUP BY `Parent`');
$links = array();
while(
false !== $fetch mysql_fetch_assoc($q))
{
    
$links[$fetch['Parent']] = explode(',' ,$fetch['ids']);
}
mysql_free_result($q);
function 
serialize_table_id($id 0)
{
    global 
$table$links;
    static 
$level 0;
    
$space str_repeat(' '4);
    
$nl chr(13).chr(10);
    
$str '';
    if(
array_key_exists($id$links))
    {
        if(
$id != 0)
        {
            
$str .= $nl;
            
$level++;
        }
        
$str .= str_repeat($space$level);
    }
    
$str .= '[';
    if(
array_key_exists($id$links))
    {
        
$level++;
        
$str .= $nl;
        foreach(
$links[$id] as $k => $child)
        {
            if(
$k != 0)
                
$str .= ','.$nl;
            
$str .= str_repeat($space$level).'{'.$nl;
            
$level++;
            
$str .= str_repeat($space$level).'"Name" : "'.addslashes($table[$child]['Name']).'",'.$nl;
            
$str .= str_repeat($space$level).'"ID" : '.$child.','.$nl;
            
$str .= str_repeat($space$level).'"Children" : '.serialize_table_id($child);
            
$level--;
            
$str .= str_repeat($space$level).'}';
        }
        
$str .= $nl;
        
$level--;
        
$str .= str_repeat($space$level);
        
$level--;
    }
    
$str .= ']'.$nl;
    return 
$str;
}


echo 
serialize_table_id();

?>



Намучался с отступами, вроде бы получилось. Насчёт экранирования в JS, я не знаю как и что экранировать в литералах этого языка, поэтому пользуюсь обычным addslashes, если нужно что то ещё учесть - поправте.

[UPD]

Как минимум эта функция (addslashes) не экранирует переводы строк. Поэтому тут правильней написать отдельную функцию, которая учтёт все особенности.

   
 
 автор: Trianon   (12.07.2008 в 00:20)   письмо автору
 
   для: sms-send   (11.07.2008 в 23:44)
 

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

Согласен. Не сказано. Но тогда нужно поставить хоть что-то. Не устроит - поправят. Хотя бы внимание обратят.
Потому что "'$text'" при неизвестном $text - это заведомый баг. Гарантированный.

   
 
 автор: Trianon   (12.07.2008 в 00:16)   письмо автору
 
   для: Raffi   (12.07.2008 в 00:10)
 

Можно оттолкнуться от решения sms-send . Только я всё равно, написал хотя бы
$str .= '"Name" : "'.mysql_escape_string($fetch['Name']).'",'; 

Постепенно преодолевая сложности.

Можно воспользоваться чем-то готовым. Вроде библиотеки Д.Котерова
http://dklab.ru/lib/JsHttpRequest/

   
 
 автор: Raffi   (12.07.2008 в 00:10)   письмо автору
 
   для: Trianon   (11.07.2008 в 23:52)
 

Мне чтобы соединить PHP и Java Script нужно PHP-код встачить в один файл, а Java Script в другой и из JS-файла при помощи XmlHttpRequest считать информацию из PHP-файла, чтобы затем при помощи того же JS-файла вывести её на экран?

   
 
 автор: Trianon   (11.07.2008 в 23:52)   письмо автору
 
   для: Raffi   (11.07.2008 в 23:47)
 

То есть получаемая структура - это хеш на языке JavaScript?
Значит unicode, эскейпинг всех спецсимволов, букв нац.алфавитов... Вот, sms-send, недостающая инфа.
Собственно, отступы ему только для красоты, хотя слегка покумекав, можно сделать и отступы.

   
 
 автор: Raffi   (11.07.2008 в 23:47)   письмо автору
 
   для: sms-send   (11.07.2008 в 23:44)
 

Мне в конечном итоге нужно на странице произвести XmlHttpRequest и запросить данный объект.
и заполнить элемент select с помощью данного массива, вложенность отображая отступами.
Такое возможно сделать?
Я извиняюсь, может задаю глупые вопросы, просто в PHP не так давно начала программировать

   
 
 автор: sms-send   (11.07.2008 в 23:44)   письмо автору
 
   для: Trianon   (11.07.2008 в 23:35)
 

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

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования