Чем заменить foreach php

Чем заменить foreach php

PHP предлагает альтернативный синтаксис для некоторых его управляющих структур, а именно: if , while , for , foreach и switch . В каждом случае основной формой альтернативного синтаксиса является изменение открывающей фигурной скобки на двоеточие (:), а закрывающей скобки на endif; , endwhile; , endfor; , endforeach; или endswitch; соответственно.

В приведённом выше примере, блок HTML «A равно 5» вложен внутрь структуры if , написанной с альтернативным синтаксисом. Блок HTML будет показан только если переменная $a равна 5.

Альтернативный синтаксис также применяется и к else и elseif . Ниже приведена структура if с elseif и else в альтернативном формате:

if ( $a == 5 ):
echo «a равно 5» ;
echo «. » ;
elseif ( $a == 6 ):
echo «a равно 6» ;
echo «. » ;
else:
echo «a не равно ни 5 ни 6» ;
endif;
?>

Замечание:

Смешивание синтаксиса в одном и том же блоке управления не поддерживается.

Любой вывод (включая пробельные символы) между выражением switch и первым case приведут к синтаксической ошибке. Например, данный код не будет работать:

В то же время следующий пример будет работать, так как завершающий перевод строки после выражения switch считается частью закрывающего ?> и следовательно ничего не выводится между switch и case :

Смотрите также while, for и if для дальнейших примеров.

Источник

Чем заменить foreach php

Доброго всем дня. Я нуждаюсь в помощи.
Есть такой код:

php foreach($this->categories as $category): 
$query = 'SELECT image FROM #__categories WHERE darling'>php echo JURI::base();?>images/stories/php echo $image; ?>" />
php endforeach; ?>

В результате выводятся все рисунки записанные в массив категорий.
КАК СДЕЛАТЬ ЧТОБЫ ВЫВОДИЛСЯ ВСЕГО ОДИН РИСУНОК, НО ПРИНАДЛЕЖАЩИЙ ТОЙ КАТЕГОРИИ В КОТОРОЙ НАХОДИШСЯ В ДАННЫЙ МОМЕНТ.

$query = 'SELECT image FROM #__categories WHERE LIMIT 1';

Где-то надо получить видимо не массив категорий, а только одну текущую. Либо прежде найти текущую в массиве.

Каких именно данных не хватает?

Вставил строку, но ничего не изменилось.. попрежнему выводит все изображения массива

Получается так: в системе управления сайтом я создаю категории и присваиваю им изображение. А в файле default. php прописан этот код для вывода изображений и названий категорий. Далее: в каждой категории есть материал. Я скопировал код из файла default. php в файл который выводит материал категории. В итоге в материале теперь выводятся все изобрежения категорий.

А мне еще интересно, $this->categories — это массив? И, $this->categories[0]->image, а так нельзя? Если это объект, у него есть поле id, может у него есть и поле image? Материал имеет ссылку на категорию?
Просто пример

$current_cat = isset($_GET['cat'])?(integer)$_GET['cat']:1;
$sql = "select image from categories where . $current_cat;

Сам язык php я не знаю. Так что тут у меня методом тыка.
$this->categories — да это массив
$this->categories[0]->image — попробовал. выводит только картинку принадлежащую категории [0]

Источник

Форум PHP программистов ► PHP практикум ► PHP для знатоков

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 20918
На форуме:
Карма:

Прошу прощения если не туда запостил, но хотелось бы услышать мнение знающих людей.
Я много слышал о том что foreach() очень медленный и его не желательно использовать.
Нужно ли его боятся как огня и выдумывать какой нибудь изврат типа:

$array = array(‘a’,’b’,’c’,’d’,’e’);
$flag=’0′;
while($flag <=count($array))<
echo $array[$flag].’ ‘;
$flag++;
>

или всетаки он не настолько страшный чтоб не использовать его вобще.

в простом масиве можно и while использовать.
а как ты будеш с ассоциативным масивом работат ?
вначале клучи от значений растягивать а потом в while проходить?

короче с асоциативным масивом ты извращайся как хочеш, а я буду foreach применять

Цитата (mrmaloy @ 19.06.2010 — 14:28)
Я много слышал о том что foreach() очень медленный и его не желательно использовать.
php
// Заполняем массив, запускаем таймер:
$test = array();
for($i=0;$i10000;$i++)$test[] = $i;
list($usec, $sec) = explode(" ", microtime());
$timer_0 = ((float)$usec + (float)$sec);

// Тестируем for
$t = 0;
for($i=0;$i10000;$i++)$t++;
list($usec, $sec) = explode(" ", microtime());
$timer_1 = ((float)$usec + (float)$sec);
echo "for: ".($timer_1-$timer_0);

// Тестируем while
while($i>=0)$i--;
list($usec, $sec) = explode(" ", microtime());
$timer_2 = ((float)$usec + (float)$sec);
echo "
while: "
.($timer_2-$timer_1);

// Тестируем foreach
foreach($test as $t)$i++;
list($usec, $sec) = explode(" ", microtime());
$timer_3 = ((float)$usec + (float)$sec);
echo "
foreach: "
.($timer_3-$timer_2);
?>
for: 0.0047619342804
while: 0.00278115272522
foreach: 0.00386881828308

Вывод: самый медленный — for; самый быстрый while; foreach по скорости средний.

for: 0.47660279274
while: 0.272993087769
foreach: 0.389252901077

Источник

Использование циклов в PHP

PHP имеет четыре вида циклов и операторы управления ими, рассмотрим поподробнее.

Foreach – перебор массива

Предназначен для перебора элементов массива.

Foreach – перебор массива

$array = array( 1 => 'Значение 1', 2 => 'Значение 2', 3 => 'Значение 3', 4 => 'Значение 4', ); // Вывод ключей foreach ($array as $key => $val) < echo $key . '
'; > // Вывод значений foreach ($array as $key => $val) < echo $val . '
'; >

Результат:

1 2 3 4 Значение 1 Значение 2 Значение 3 Значение 4

Альтернативный синтаксис foreach

For – цикл с счетчиком

Цикл работает пока выполняется заданное условие. Обычно применяется в качестве счетчика.

For – цикл с счетчиком

// Счетчик от 0 до 5 for ($n = 0; $n // Счетчик от 5 до 0 for ($n = 5; $n >= 0; $n--)

Результат:

Альтернативный синтаксис

$array = array( 'Значение 1', 'Значение 2', 'Значение 3', 'Значение 4', ); for ($n = 0; $n < count($array); $n++) < echo $array[$n] . '
'; >

Результат:

Значение 1 Значение 2 Значение 3 Значение 4

Альтернативный синтаксис for

While – цикл с предусловием

Т.е. если перед началом итерации условие выполняется, то цикл продолжает свою работу.

While – цикл с предусловием

Результат:

Альтернативный синтаксис while

Do-while – цикл с постусловием

В отличии от while этот цикл проверяет выполнения условия после каждой итерации. Do-while не имеет альтернативного синтаксиса.

Do-while – цикл с постусловием

Результат:

Управление циклами

Break

Вызов break или break 1 в цикле останавливает его.

Для вложенных циклов используется break 2 и т.д.

Continue

Используется для пропуска итерации.

Результат:

Для вложенных циклов по аналогии с break 2 , break 3 – continue 2 , continue 3 .

Источник

Each() устарела, а чем заменить не сказали

сма DAEWOO DWD M1029A чем заменить транс, трансформатор в обрыве, чем заменить
день добрый. модуль PN:361430A950 первичная транса в обрыве . может кто подскажет параметры .

Чем можно заменить заменить toggle() ?
Добрый день, у меня такой вопрос. Чем можно заменить toggle(function(), function()); В ранних.

Устарела ли JavaEE
Подскажите пожалуйста, устарела или устаревает Java ee, а то я начал недавно ее изучать, а если да.

Книга устарела?
У меня есть книга за 1996 год. Намир Шамма "Основы С++ и объектно-ориентированного.

Эксперт PHP

ЦитатаСообщение от Jewbacabra Посмотреть сообщение

не подходит.
Первый и второй элемент массива обрабатываются одним алгоритмом, остальные, до конца — другим алгоритмом.
Переписывать целые куски программы однако.. С foreach-ем говнокодище какое-то получится. Счетчик вводить и гонять его чтобы в каждой итерации на 100000 элементов проверять не является ли элемент первым или вторым. А главное непонятно кому эта функция помешала..

Эксперт PHP

Лучший ответ

Сообщение было отмечено otto-fukin как решение

Решение

ЦитатаСообщение от otto-fukin Посмотреть сообщение

Первый и второй элемент массива обрабатываются одним алгоритмом, остальные, до конца — другим алгоритмом.

Массив все же однородная стуктура. Если есть необходимость разные элементы обрабатывать по-разному, то вероятно следует пересмотреть алгоритм

ЦитатаСообщение от otto-fukin Посмотреть сообщение

Счетчик вводить и гонять его чтобы в каждой итерации на 100000 элементов проверять не является ли элемент первым или вторым.

Cтоит заметить, что each — самый медленный способ обхода массива. if внутри foreach будет на порядок быстрее (см. бенчмарк под спойлером)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/** * @BeforeMethods() * @Iterations(5) */ class IterBench { private $array; private $filename; public function init() { $this->array = range(1, 1000000); } public function benchForeach() { foreach ($this->array as $key => $value); } public function benchEach() { while (list($key, $value) = each($this->array)); } public function benchFor() { $count = count($this->array); for ($i = 0; $i  $count; ++$i); } }
/srv # ./vendor/bin/phpbench run IterBench.php --report=aggregate PhpBench 0.14.0 (@git_version@). Running benchmarks. Using configuration file: /srv/phpbench.json \IterBench benchForeach I4 P0 [μ Mo]/r: 30,202.800 29,886.746 (μs) [μSD μRSD]/r: 423.400μs 1.40% benchEach I4 P0 [μ Mo]/r: 587,427.800 584,176.059 (μs) [μSD μRSD]/r: 6,420.265μs 1.09% benchFor I4 P0 [μ Mo]/r: 42,743.000 42,742.724 (μs) [μSD μRSD]/r: 30.607μs 0.07% 3 subjects, 15 iterations, 3 revs, 0 rejects, 0 failures, 0 warnings (best [mean mode] worst) = 29,821.000 [220,124.533 218,935.176] 30,729.000 (μs) ⅀T: 3,301,868.000μs μSD/r 2,291.424μs μRSD/r: 0.855% suite: 133ecf2b3038570f7c4970734ecef34bc077c712, date: 2018-02-10, stime: 22:25:55 +-----------+--------------+--------+--------+------+-----+-------------+---------------+---------------+---------------+---------------+-------------+--------+--------+ | benchmark | subject | groups | params | revs | its | mem_peak | best | mean | mode | worst | stdev | rstdev | diff | +-----------+--------------+--------+--------+------+-----+-------------+---------------+---------------+---------------+---------------+-------------+--------+--------+ | IterBench | benchForeach | | [] | 1 | 5 | 34,638,288b | 29,821.000μs | 30,202.800μs | 29,886.746μs | 30,729.000μs | 423.400μs | 1.40% | 1.00x | | IterBench | benchEach | | [] | 1 | 5 | 34,638,656b | 581,722.000μs | 587,427.800μs | 584,176.059μs | 599,139.000μs | 6,420.265μs | 1.09% | 19.45x | | IterBench | benchFor | | [] | 1 | 5 | 34,638,288b | 42,696.000μs | 42,743.000μs | 42,742.724μs | 42,790.000μs | 30.607μs | 0.07% | 1.42x | +-----------+--------------+--------+--------+------+-----+-------------+---------------+---------------+---------------+---------------+-------------+--------+--------+

Источник

Читайте также:  All combinations array java
Оцените статью