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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Возможно существует возможность обратиться к возврощяемому функцией масиву по ключу не прибегая к записи в переменную !?
 
 автор: Inviseble_Demon   (13.08.2009 в 21:22)   письмо автору
 
 

Доброго времени суток.

В обьяснениях не силен так что буду давить на примеры ))


<?
$str
='123|456|789';
$array=explode('|'$str);  
#        ^
#        |
#Именно эта строка меня и напрегает.
#Мне данные к примеру по "1" ключу нужны единажды но при этом я выделяю на это память ! 
#Конечно можно её после использованния и unset`тить но всеже....
echo $array['1'];


Возможно существует возможность обратиться к возврощяемому функцией масиву по ключу не прибегая к записи в переменную !?


<?
$str
='123|456|789';
echo 
explode('|'$str).array(1);

  Ответить  
 
 автор: Trianon   (13.08.2009 в 21:27)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:22)
 

увы.
Максимум -
$str='123|456|789';
$x = explode('|', $str);
$x = $x[1];
при чем если Вы полагаете, что гипотетическая конструкция echo explode('|', $str)[1]; не выделит память под весь массив - Вы изрядно заблуждаетесь

  Ответить  
 
 автор: Inviseble_Demon   (13.08.2009 в 21:37)   письмо автору
 
   для: Trianon   (13.08.2009 в 21:27)
 

>>> не выделит память под весь массив - Вы изрядно заблуждаетесь

Согласен...

Тогда выходит что гепотетическая конструкция эквивалентна:


<?
$array
=explode('|''123|456|789');    
echo 
$array['1'];
unset(
$array);


Ну в принцепи ваш пример равносилен )


Блин.. жаль... (((

  Ответить  
 
 автор: Trianon   (13.08.2009 в 21:46)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:37)
 

всё. Не выдержал.
Invisible
гипотетическая
в принципе

  Ответить  
 
 автор: Inviseble_Demon   (13.08.2009 в 21:57)   письмо автору
 
   для: Trianon   (13.08.2009 в 21:46)
 

))

Ник правельно написан (покрайней мере я так считал когда приклеел его к себе :D)
Со всем остальным согласен. Но всеже ни когда не мог понять нахер на это тыкать !?....

  Ответить  
 
 автор: Trianon   (13.08.2009 в 21:59)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:57)
 

Потому что мне по глазам бьет. Но Вы не поймете, верю.

  Ответить  
 
 автор: Inviseble_Demon   (13.08.2009 в 22:04)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:57)
 

)) А вот со мной все наоборот... Я ошибки редко вижу но делать просто обожаю. (наверно зря я спал на руссом :D)

  Ответить  
 
 автор: Рома   (13.08.2009 в 23:01)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 22:04)
 

Да, зря. Будете девушке писать, она будет о вас не лучшего мнения.

  Ответить  
 
 автор: neadekvat   (13.08.2009 в 23:51)   письмо автору
 
   для: Рома   (13.08.2009 в 23:01)
 

> Ник правельно написан (покрайней мере я так считал когда приклеел его к себе :D)
> Со всем остальным согласен. Но всеже ни когда не мог понять нахер на это тыкать !?....
Ник правильно написан (по крайней мере, я так считал, когда приклеел его к себе)
Со всем остальным согласен. Но все же никогда не мог понять, на#ер на это тыкать.

Потому что русский язык умирает из-за таких как вы! Научитесь писать сначала по-русски, а потом уже лезьте в программирование!

  Ответить  
 
 автор: Саня   (13.08.2009 в 21:28)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:22)
 

Если вы настолько печетесь о памяти, то зачем тогда всю строку "123|456|789" присваивать переменной?

  Ответить  
 
 автор: Inviseble_Demon   (13.08.2009 в 21:32)   письмо автору
 
   для: Саня   (13.08.2009 в 21:28)
 

O_o

А что PHP с 5.x версии облодает телепатией !?

Как подругому он узнает о существовании данных !?

Или вы к тому что в коде всего 3 строки и при этом можно было в 2 написать


<?
$array
=explode('|''123|456|789');   
echo 
$array['1'];

  Ответить  
 
 автор: Саня   (13.08.2009 в 21:48)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:32)
 

Допустим у нас есть $str = ''123|456|789''; допустим что эта переменная занимает в памяти ровно 11 байт. Допустим сделали explode('|', $str). Допустим получили массив из трёх элементов, занимающих по 3 байта + незначительные накладные расходы. Ну так какого хрена? Памяти-то всё равно хватает!

Попытка №2:
У нас есть строка X байт, состоящая из элементов, разделённых знаком '|'. Мы делаем explode('|', строка) и, зная, что существует третий параметр у этой функции, получим массив состоящий из N значений, в сумме равняющийся X + некоторые накладные расходы.

Примечание. Если учесть, что на низком уровне массив в РНР работает так же как и в СИ, то накладные расходы будут меньше нуля.

Попытка №3:
У нас есть строка X байт, состоящая из элементов, разделённых знаком '|', но длина которой больше чем установленный memory_limit в php.ini... так какого хрена нам полностью нужна эта строка в памяти?

  Ответить  
 
 автор: Trianon   (13.08.2009 в 21:53)   письмо автору
 
   для: Саня   (13.08.2009 в 21:48)
 

>Допустим получили массив из трёх элементов, занимающих по 3 байта + незначительные накладные расходы.

Вот насчет незначительности расходов я усомнюсь...
именно потому, что php - не Си

  Ответить  
 
 автор: Саня   (13.08.2009 в 22:16)   письмо автору
 
   для: Trianon   (13.08.2009 в 21:53)
 

Даже если учесть, что накладные расходы составят 100% от исходной строки, то мне слабо поверится, что найдётся сумасшедший, решивший загрузить файл (строку, жестко прописанную в скрипте) размером 64 мегабайта целиком в память (в моей практике подавляющее большинство хостеров (по крайней мере тех, с которыми я постоянно имею дело) ставят memory_limit=128M).

  Ответить  
 
 автор: Trianon   (13.08.2009 в 22:26)   письмо автору
 
   для: Саня   (13.08.2009 в 22:16)
 

Я не про то.
$s = "1|2|3|4|5";
Сколько занимает строка, и сколько - порожденный ею массив?

  Ответить  
 
 автор: Саня   (13.08.2009 в 22:31)   письмо автору
 
   для: Trianon   (13.08.2009 в 22:26)
 

Этого я не могу знать. Но не думаю что сильно много, по сравнению с исходной строкой.

  Ответить  
 
 автор: Trianon   (13.08.2009 в 22:44)   письмо автору
 
   для: Саня   (13.08.2009 в 22:31)
 

<?php

for($a memory_get_usage(),  $x = array(),$i 0;
    
$i 100;
    
printf("%03d %04d<br>\r\n"$i,  memory_get_usage()-$a), $i++)
      
$x[] = chr($i);
?>


Вот. Запустите, поглядите. Покурите...

  Ответить  
 
 автор: Inviseble_Demon   (13.08.2009 в 22:02)   письмо автору
 
   для: Саня   (13.08.2009 в 21:48)
 

Блин..

Дело то не в том что память кончится! Дело в принцепи! Я тупанул... Trianon был прав когда напомнил про то что память так и так выделится... Так что моя идея в принцепи нерентабельна....

Думаю тема закрыта. Всем спасибо

  Ответить  
 
 автор: heed   (13.08.2009 в 22:21)   письмо автору
 
   для: Inviseble_Demon   (13.08.2009 в 21:32)
 

можно выдернуть только одну переменную
<?php
echo (int) '123|456|789';

list(,,$test) = sscanf('123|456|789', '%u|%u|%u');
echo $test;
?>
но редко бывает что в скрипте не все переменные нужны
и на памяти тоже не скажется

  Ответить  
 
 автор: Саня   (13.08.2009 в 22:23)   письмо автору
 
   для: heed   (13.08.2009 в 22:21)
 

Расскажите мне почему выражение "echo (int) '123|456|789';" потребует менее 11 байт?
Впрочем как и это: "list(,,$test) = sscanf('123|456|789', '%u|%u|%u');"

  Ответить  
 
 автор: heed   (13.08.2009 в 22:34)   письмо автору
 
   для: Саня   (13.08.2009 в 22:23)
 

>и на памяти тоже не скажется
я так и сказал
// просто наверное не точно сказал
а там кто его знает из стека они читают или не из стека

  Ответить  
 
 автор: Саня   (13.08.2009 в 23:03)   письмо автору
 
   для: heed   (13.08.2009 в 22:34)
 

Что вы вкладываете во вразу "на памяти тоже не скажется"?

  Ответить  
Rambler's Top100
вверх

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