Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уникальный ID переменной, Как достать? 
:(
    Опции темы
webevt
  Дата 23.3.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



Допустим, существует переменная(или массив) с определенными данными внутри. Как достать ее уникальный номер? ID должен основываться на содержимом этой переменной и не должен быть рандомным(если переменные одинаковые, то и ID`ы у них будут одинаковые).

Сейчас ID получаю таким образом:
Код

$ID = md5( serialize ( $var ) );

Опасаюсь за скорость и правильность такой конструкции...Может есть более элегантный способ?
PM MAIL   Вверх
Feldmarschall
Дата 23.3.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Задавая абстрактный вопрос ("допустим, есть переменная..."), не стоит надеяться на конкретный ответ.
Допустим, за скорость и правильность беспокоиться не нужно.
PM   Вверх
Fortop
Дата 23.3.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Если у тебя это объект, то можешь пользоваться spl_object_hash()
Хотя и твой вариант приемлем. 


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
flashaa
Дата 23.3.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



webevt, ваше решение неплохо решает вами же поставленную задачу. Можно поинтересоваться, зачем это?
PM MAIL   Вверх
Fortop
Дата 23.3.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(flashaa @  23.3.2008,  15:58 Найти цитируемый пост)
Можно поинтересоваться, зачем это? 

Я не webevt, но вариантов может быть масса.

У меня был случай, когда необходимо было манипулировать списком сущностей полученных в результате агрегации нескольких таблиц.
Да тот же простой грид с запоминанием отмеченной строки, когда строка не является самостоятельным объектом в базе.



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
webevt
Дата 24.3.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



flashaa, для кэширования, в шаблонизаторе.
При каждом запуске парсинга какого-либо шаблона, проверяется контрольная сумма(3 массива содержат все переменные, циклы и условные блоки - они составляют контрольную сумму) всех переменных шаблона. Если контр. сумма не поменялась - то вместо парсинга шаблона отдаются данные из кэша, а если поменялась - то парсится шаблон и создается новый кэш.
PM MAIL   Вверх
ksnk
Дата 24.3.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(webevt @  23.3.2008,  12:29 Найти цитируемый пост)
$ID = md5( serialize ( $var ) );

Единственная трабла, которая мне в голову пришла - md5 - медленная функция, так что если "шаблон" достаточно длинный, то вычисляться может достаточно долго...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 24.3.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Насчет скорости.

Generated 500hash(s) in 768.20117282867 seconds
parsed 1 449 999 500 bytes

P4 2GHz 512Mb

Дома еще проверю на более быстрой.

Вот исходный код

Генерим набор файлов (500штук) - долго smile порядка 10-15 минут.
Код

<?php
set_time_limit(0);
$path = realpath('.');

$fl = fopen($path . 'list.txt', 'w+');
for ($k = 0; $k < 500; $k++) {
    $uniqString = '';
    $uni = array();
    $fn = tempnam($path, 'templ_');
    for ($i = 0; $i < 50000; $i++) {
     $uni[] = uniqid($fn, true);
    }
    $uniqString = implode("\n", $uni);
    file_put_contents($fn, $uniqString);
    fwrite($fl, $fn . "\n");
}
fclose($fl);
?>


Генерим хэши
Код

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

$path = realpath('.');
$list = file($path . 'list.txt');

$i = 0;
$sumSize = 0;

$time_start = microtime_float();
foreach ($list as  $fn) {
    $i++;
    $fs = filesize(trim($fn));
    $sumSize += $fs;
    $obj = file(trim($fn));
    $newid = md5(serialize($obj));
}
$time_end = microtime_float();

$time = $time_end - $time_start;

echo 'Generated ' . $i . 'hash(s) in ' . $time . 'seconds';
echo 'parsed ' . $sumSize . ' bytes';


Добавлено через 36 секунд
Так что можно не заморачиваться насчет скорости.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
webevt
  Дата 24.3.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



Fortop, спасибо огромное за анализ smile

Вопрос закрыт. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.