|
|
|
| Доброго времени суток.
В обьяснениях не силен так что буду давить на примеры ))
<?
$str='123|456|789';
$array=explode('|', $str);
# ^
# |
#Именно эта строка меня и напрегает.
#Мне данные к примеру по "1" ключу нужны единажды но при этом я выделяю на это память !
#Конечно можно её после использованния и unset`тить но всеже....
echo $array['1'];
|
Возможно существует возможность обратиться к возврощяемому функцией масиву по ключу не прибегая к записи в переменную !?
<?
$str='123|456|789';
echo explode('|', $str).array(1);
|
| |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 21:22)
| | увы.
Максимум -
$str='123|456|789';
$x = explode('|', $str);
$x = $x[1];
при чем если Вы полагаете, что гипотетическая конструкция echo explode('|', $str)[1]; не выделит память под весь массив - Вы изрядно заблуждаетесь | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 21:27)
| | >>> не выделит память под весь массив - Вы изрядно заблуждаетесь
Согласен...
Тогда выходит что гепотетическая конструкция эквивалентна:
<?
$array=explode('|', '123|456|789');
echo $array['1'];
unset($array);
|
Ну в принцепи ваш пример равносилен )
Блин.. жаль... ((( | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 21:37)
| | всё. Не выдержал.
Invisible
гипотетическая
в принципе | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 21:46)
| | ))
Ник правельно написан (покрайней мере я так считал когда приклеел его к себе :D)
Со всем остальным согласен. Но всеже ни когда не мог понять нахер на это тыкать !?.... | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 21:57)
| | Потому что мне по глазам бьет. Но Вы не поймете, верю. | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 21:57)
| | )) А вот со мной все наоборот... Я ошибки редко вижу но делать просто обожаю. (наверно зря я спал на руссом :D) | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 22:04)
| | Да, зря. Будете девушке писать, она будет о вас не лучшего мнения. | |
|
|
|
|
|
|
|
для: Рома
(13.08.2009 в 23:01)
| | > Ник правельно написан (покрайней мере я так считал когда приклеел его к себе :D)
> Со всем остальным согласен. Но всеже ни когда не мог понять нахер на это тыкать !?....
Ник правильно написан (по крайней мере, я так считал, когда приклеел его к себе)
Со всем остальным согласен. Но все же никогда не мог понять, на#ер на это тыкать.
Потому что русский язык умирает из-за таких как вы! Научитесь писать сначала по-русски, а потом уже лезьте в программирование! | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 21:22)
| | Если вы настолько печетесь о памяти, то зачем тогда всю строку "123|456|789" присваивать переменной? | |
|
|
|
|
|
|
|
для: Саня
(13.08.2009 в 21:28)
| | O_o
А что PHP с 5.x версии облодает телепатией !?
Как подругому он узнает о существовании данных !?
Или вы к тому что в коде всего 3 строки и при этом можно было в 2 написать
<?
$array=explode('|', '123|456|789');
echo $array['1'];
|
| |
|
|
|
|
|
|
|
для: 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... так какого хрена нам полностью нужна эта строка в памяти? | |
|
|
|
|
|
|
|
для: Саня
(13.08.2009 в 21:48)
| | >Допустим получили массив из трёх элементов, занимающих по 3 байта + незначительные накладные расходы.
Вот насчет незначительности расходов я усомнюсь...
именно потому, что php - не Си | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 21:53)
| | Даже если учесть, что накладные расходы составят 100% от исходной строки, то мне слабо поверится, что найдётся сумасшедший, решивший загрузить файл (строку, жестко прописанную в скрипте) размером 64 мегабайта целиком в память (в моей практике подавляющее большинство хостеров (по крайней мере тех, с которыми я постоянно имею дело) ставят memory_limit=128M). | |
|
|
|
|
|
|
|
для: Саня
(13.08.2009 в 22:16)
| | Я не про то.
$s = "1|2|3|4|5";
Сколько занимает строка, и сколько - порожденный ею массив? | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 22:26)
| | Этого я не могу знать. Но не думаю что сильно много, по сравнению с исходной строкой. | |
|
|
|
|
|
|
|
для: Саня
(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);
?>
|
Вот. Запустите, поглядите. Покурите... | |
|
|
|
|
|
|
|
для: Саня
(13.08.2009 в 21:48)
| | Блин..
Дело то не в том что память кончится! Дело в принцепи! Я тупанул... Trianon был прав когда напомнил про то что память так и так выделится... Так что моя идея в принцепи нерентабельна....
Думаю тема закрыта. Всем спасибо | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(13.08.2009 в 21:32)
| | можно выдернуть только одну переменную
<?php
echo (int) '123|456|789';
list(,,$test) = sscanf('123|456|789', '%u|%u|%u');
echo $test;
?>
но редко бывает что в скрипте не все переменные нужны
и на памяти тоже не скажется | |
|
|
|
|
|
|
|
для: heed
(13.08.2009 в 22:21)
| | Расскажите мне почему выражение "echo (int) '123|456|789';" потребует менее 11 байт?
Впрочем как и это: "list(,,$test) = sscanf('123|456|789', '%u|%u|%u');" | |
|
|
|
|
|
|
|
для: Саня
(13.08.2009 в 22:23)
| | >и на памяти тоже не скажется
я так и сказал
// просто наверное не точно сказал
а там кто его знает из стека они читают или не из стека | |
|
|
|
|
|
|
|
для: heed
(13.08.2009 в 22:34)
| | Что вы вкладываете во вразу "на памяти тоже не скажется"? | |
|
|
|