Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: foreach ограничение на вывод

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Golovastik
Отправлено: 29 Января, 2011 - 00:46:52
Post Id


Гость


Покинул форум
Сообщений всего: 89
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Как через цикл foreach вывести не весь массив а например с 1 по 2 элемент?
Если например имеем такой массив.

PHP:
скопировать код в буфер обмена
  1.  
  2. $a = array( //Объявлени массива
  3. "green"  => "Зелёный",
  4. "yellow" => "жёлтый",
  5. "white"  => "белый",
  6. "black"  => "Чёрный",
  7. "blue"   => "Синий",
  8. );
  9.  
 
 Top
EuGen Администратор
Отправлено: 29 Января, 2011 - 00:50:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Логичнее через for
Если же принципиален foreach, то используйте break


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Golovastik
Отправлено: 29 Января, 2011 - 01:00:45
Post Id


Гость


Покинул форум
Сообщений всего: 89
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Да, можно вот так сделать.
PHP:
скопировать код в буфер обмена
  1.  
  2. $i = 0;
  3. foreach($a as $key =>$one){
  4. $i++;
  5. if($i >3) break;
  6. printf("%s - %s ",$key,$one);
  7. echo "\n";
  8. }
  9.  


Какие варианты лучше есть?
 
 Top
Uchkuma
Отправлено: 29 Января, 2011 - 11:35:50
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Через foreach где-то так и получится. Только можно, например, счетчик с бриком поставить не вверху, а внизу и при достижении количества элементов на следующую итерацию не заходить.
(Добавление)
А еще есть array_slice.
 
 Top
OrmaJever Модератор
Отправлено: 29 Января, 2011 - 14:07:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Мне кажется самый лутший и понятный вариант это как написал Golovastik
PHP:
скопировать код в буфер обмена
  1. $arr = array(5=>'a', 4=>'b', 3=>'c', 2=>'d', 1=>'e');
  2. $i = 0;
  3. foreach($arr as $k =>$v){
  4.         echo $k.' => '.$v."<br>\n";
  5.         if(++$i == 3) break;
  6. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
JustUserR
Отправлено: 29 Января, 2011 - 23:15:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Golovastik пишет:
Как через цикл foreach вывести не весь массив а например с 1 по 2 элемент
Использование языка PHP предполагает осуществление огранизации списковых объектов в виде унифицированных ассоциативных массивов с поддержкой прямого внутренного индекса ассоциированного с текущим выбранным элементом - таким образом наиболее простым и эффективным вариантом решения поставленной задачи является использование функций типа each


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
LEONeso
Отправлено: 30 Января, 2011 - 01:48:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




Golovastik пишет:
Как через цикл foreach вывести не весь массив а например с 1 по 2 элемент?
Если например имеем такой массив.

PHP:
скопировать код в буфер обмена
  1.  
  2. $a = array( //Объявлени массива
  3. "green"  => "Зелёный",
  4. "yellow" => "жёлтый",
  5. "white"  => "белый",
  6. "black"  => "Чёрный",
  7. "blue"   => "Синий",
  8. );
  9.  


после надо дописать следующий код:
PHP:
скопировать код в буфер обмена
  1. foreach(range(1,2) as $key)
  2.             {echo $a[$key].'<br>';}//указываем массив, далее подставляются ключи

выдаст: желтый, белый

--
зы: Не знаю, что все к for() прицепились... вопрос достаточно прямолинеен.

(Отредактировано автором: 30 Января, 2011 - 01:50:18)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
annihilus
Отправлено: 30 Января, 2011 - 02:25:55
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




LEONeso пишет:
выдаст: желтый, белый

Интересно каким образом?

Скорее всего выдаст:
Notice: Undefined index 1,2 ....
 
 Top
LEONeso
Отправлено: 30 Января, 2011 - 04:04:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




annihilus, данный пример работает при ключах типа 0+

рабочий пример:
PHP:
скопировать код в буфер обмена
  1. $a = array(
  2. "Зелёный",
  3. "жёлтый",
  4. "белый",
  5. "Чёрный",
  6. "Синий",
  7. );
  8.  
  9.       foreach(range(1,2) as $key)
  10.  
  11.                   {echo $a[$key].'<br>';}//указываем массив, далее подставляются ключи

массив сам расставляет ключи от 0 и далее


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
annihilus
Отправлено: 30 Января, 2011 - 13:26:06
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




LEONeso пишет:
annihilus, данный пример работает при ключах типа 0+

рабочий пример:
PHP:
скопировать код в буфер обмена
  1. $a = array(
  2. "Зелёный",
  3. "жёлтый",
  4. "белый",
  5. "Чёрный",
  6. "Синий",
  7. );
  8.  
  9.       foreach(range(1,2) as $key)
  10.  
  11.                   {echo $a[$key].'<br>';}//указываем массив, далее подставляются ключи

массив сам расставляет ключи от 0 и далее


да я в курсе , просто тема про массив со строковыми индексами)
 
 Top
LifePlay
Отправлено: 30 Января, 2011 - 14:32:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Вариант создания другого массива с нужным содержимым.
Функция array_slice

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $a = array( //Объявлени массива
  3. "green"  => "Зелёный",
  4. "yellow" => "жёлтый",
  5. "white"  => "белый",
  6. "black"  => "Чёрный",
  7. "blue"   => "Синий",
  8. );
  9.  
  10.  
  11. echo 'До : ';
  12. print_r($a);
  13.  
  14. // Начало
  15. $timegenerstart = microtime();
  16. $start_array = explode(" ",$timegenerstart);
  17. $timegenerstart = $start_array[1] + $start_array[0];
  18.  
  19. for ($i=1; $i<=1000000; $i++)
  20. {
  21. $b = array_slice($a, 3, 2);
  22. }
  23.  
  24. // Конец
  25. $timegeneraut=microtime();
  26. $end_array = explode(" ",$timegeneraut);
  27. $timegeneraut = $end_array[1] + $end_array[0];
  28. $timegenerresyltat = ($timegeneraut-$timegenerstart);
  29.  
  30. echo '<br/><br/> После : ';
  31. print_r($b);
  32. echo '<br/> Результат : '.$timegenerresyltat.'<br/><br/>';
  33. ?>


Провёл тест на время выполнения.
1000000 раз выполняется в среднем за 0.979366 сек

Потом foreach масива $b

(Отредактировано автором: 30 Января, 2011 - 14:34:18)

 
 Top
LEONeso
Отправлено: 30 Января, 2011 - 20:55:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




annihilus пишет:
LEONeso пишет:
annihilus, данный пример работает при ключах типа 0+

рабочий пример:
PHP:
скопировать код в буфер обмена
  1. $a = array(
  2. "Зелёный",
  3. "жёлтый",
  4. "белый",
  5. "Чёрный",
  6. "Синий",
  7. );
  8.  
  9.       foreach(range(1,2) as $key)
  10.  
  11.                   {echo $a[$key].'<br>';}//указываем массив, далее подставляются ключи

массив сам расставляет ключи от 0 и далее


да я в курсе , просто тема про массив со строковыми индексами)


Ладно, пусть будет так:
PHP:
скопировать код в буфер обмена
  1. $a = array(
  2. "green"  => "Зелёный",
  3. "yellow" => "жёлтый",
  4. "white"  => "белый",
  5. "black"  => "Чёрный",
  6. "blue"   => "Синий",
  7. );
  8. $a = implode("~",$a);
  9. $a = explode("~",$a);
  10.       foreach(range(1,2) as $key)
  11.       {echo $a[$key].'<br>';}//указываем массив, далее подставляются ключи


выведет: жёлтый, белый

думаю, работать будет дольше т.к. тут сразу вывод результата.
тест по пред посту выдал Результат : 4.41442489624, без ehco

данный пример, выводится быстрее в 2 раза:
PHP:
скопировать код в буфер обмена
  1. $a = array(
  2. "green"  => "Зелёный",
  3. "yellow" => "жёлтый",
  4. "white"  => "белый",
  5. "black"  => "Чёрный",
  6. "blue"   => "Синий",
  7. );
  8. $a = array_slice($a, 1, 2);
  9.       foreach($a as $b) {echo $b.', ';}

(Отредактировано автором: 30 Января, 2011 - 21:39:22)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
JustUserR
Отправлено: 31 Января, 2011 - 19:36:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




LEONeso пишет:
Не знаю, что все к for() прицепились... вопрос достаточно прямолинеен.
Использование языка PHP предполагает осуществление хранения списковых информационных полей в виде объектов ассоциативных массивов - что обеспечивает включение дополнительных накладных расходов на процесс произведение расчета целевого выражения с содержание описанря ключа и осуществление перевода уровня его трактования в элементое содержимое потока кода - по этой причине использование реальных внутренних индексов является более эффективным


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
LEONeso
Отправлено: 31 Января, 2011 - 21:32:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




JustUserR, понял только "использование реальных внутренних индексов является более эффективным" Закатив глазки


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB