- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Пробую сделать такую штуку:
Получаю
всё правильно. теперь, добавляю & в foreach
и всё тоже правильно, но откуда взялась & у последнего элемента?
Значит так надо. А какая разница то?
делаем print_r, всё нормально в элементах:
Array ( [0] => 2 [1] => 3 [2] => 4 )
но откуда взялась & у последнего элемента?
Какой то баг php что-ли? Нет такого:
$ php test.php
array(3) {
[0] =>
int(2)
[1] =>
int(3)
[2] =>
int(4)
}
$ php -v
PHP 5.5.9-1ubuntu4.11 (cli) (built: Jul 2 2015 15:23:08)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
А какая разница то?
для общего развития и понимания тонкостей. ещё пример
и оп
---------- Добавлено 06.08.2015 в 18:37 ----------
Оптимизайка,
$ php5 -v
PHP 5.5.26-1+deb.sury.org~precise+1 (cli) (built: Jun 15 2015 10:04:48)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
проверил ещё на
# php -v
PHP 5.4.43 (cli) (built: Jul 13 2015 12:26:16)
та же ерунда)
А если так?
но откуда взялась & у последнего элемента
Оттуда что после таких форичей принято делать вот так
unset($a);
Else if эта переменная будет использована ниже по коду и все что в нее попадет - окажется в последнем элементе того самого саррая.
---------- Добавлено 06.08.2015 в 18:46 ----------
А если так?
Не видел, именно оно самое.
---------- Добавлено 06.08.2015 в 18:55 ----------
Как вы пишите для общего развития: в php (а равно в js) конструкции языка типа for, switch, foreach, if, else и тп - не образуют блочного scope, то есть все задействованные внутри конструкции переменные оказываются в текущем контексте. Если в переменной значение, то ее можно реюзать, а если реф - тоже можно, если знать зачем, а если незачем, на всякий пожарный лучшее ее выпилить с дерева. Как вариант если немного входящих, то заворачиваем в безымянную функцию
---------- Добавлено 06.08.2015 в 19:01 ----------
Еще для общего. В теории указатели (которые ссылки) служат для снижения расхода памяти на копирование значений, типа передает адрес и оперируем тем, что по этому адресу находится. Так вот php - это не язык и творцы клянутся что рефы фактически не нужны, что, типа, интерпретатор и сам все зашибись оптимизирует и волноваться не о чем. Я не проверял и юзаю рефы всегда когда есть смысл.
Кстати рефы на объекты это отдельный лимерик.
---------- Добавлено 06.08.2015 в 19:09 ----------
та же ерунда)
Академик открыл для себя указатели, называется. :)
Так и должно быть. В элементе 0 - реф на массив, а в элементе 1 - копия того же массива.
Практический смысл?
Я тут постил одному человеку функцию echoit, она красивее выводит в браузер:
---------- Добавлено 06.08.2015 в 19:18 ----------
Практический смысл можно найти например в передаче адреса элемента в большом и сложном массиве, или сделать шорткат $o=&$this->opts; для местного применения, или как в вашем первом примере поменять все значения не отходя от кассы, или передать ссылку на функцию ей же самой, например:
без чего рекурсия с кложой не будет работать. Утомил? Отдыхайте :)
всё правильно. теперь, добавляю & в foreach
Для того, чтобы напрямую изменять элементы массива внутри цикла, переменной $a должен предшествовать знак &. В этом случае значение будет присвоено по ссылке.
$ar = array(1,2,3);
foreach ($ar as &$a) {
$a+=1;
}
unset($a);
VAR_DUMP($ar);
$ar = array(1,2,3);
$b = 0;
foreach ($ar as $a) {
$ar[$b]++;
$b++;
}
VAR_DUMP($ar);
Для того, чтобы напрямую
Вот как "напрямую", прямее некуда:
"Ссылки", которые указатели, в точности наоборот обращаются не напрямую, а через адрес данных в выделенной памяти. То есть накривую, кривее некуда.
---------- Добавлено 07.08.2015 в 07:40 ----------
Кстати народ часто задает вопрос как удалить элемент массива в конструкции foreach. Попытка удалить реф сами понимаете ничего не даст. Удалится сам реф, а не то, на что он указывал, а в следующей итерации реф заново будет создан.
Удалить можно только напрямую:
Теперь должно быть вполне понятно что такое напрямую.