Автор Тема: Цикълът foreach  (Прочетена 8365 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

gatakka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 19
  • Публикации: 681
Цикълът foreach
« -: 17 Януари 2010, 13:39:16 »
** Тази тема дискутира:: Цикълът foreach **
Автор: Гатака
« Последна редакция: 14 Април 2015, 22:52:09 от Avalanche »
За да знаеш трябва да питаш,
но за да знаеш някой трябва да ти отговори на питанията.
Добре дошли в Научи Ме!

Dragonyll

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 26
Отг:Цикълът foreach
« Отговор #1 -: 17 Октомври 2010, 18:38:08 »
Защо като напиша:
Код: PHP
  1. <?php
  2. $ar[0]=1;
  3. $ar[1]=2;
  4. $ar[ ' d ' ]=3;
  5. $ar[ ' b ' ]=4;
  6. $ar[5]=5;
  7.  
  8. foreach($ar as $k=>$v)
  9.  
  10. {
  11.    if($k== ' d ' )
  12.    {
  13.       break;
  14.    }
  15.    
  16.    echo $k. ' ----- ' .$v. '
  17. ' ;
  18. }
  19.  
  20. ?>
  21.  
и ми не ми излиза абсолютно нищо? Моля искам бърз отговор защото това ме спъва много
« Последна редакция: 14 Април 2015, 22:52:17 от Avalanche »

lamondbg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 75
Отг:Цикълът foreach
« Отговор #2 -: 17 Октомври 2010, 21:38:38 »
А като напишеш var_dump($аr); какво излиза?

Dragonyll

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 26
Отг:Цикълът foreach
« Отговор #3 -: 17 Октомври 2010, 21:42:29 »
Излиза array(5) { [0]=>  int(1) [1]=>  int(2) [ " d " ]=>  int(3) [ " b " ]=>  int(4) [5]=>  int(5) } обаче това нищо не ми говори. Искам да кажа знам какво е и го разбирам защо е така обаче не помага. То попринцип би трябвало да си е така.

lamondbg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 75
Отг:Цикълът foreach
« Отговор #4 -: 17 Октомври 2010, 22:26:49 »
Така работи. Предполагам, че другото е някакъв кофти вариант за проверка дали променлива е digit.
Код: PHP
  1. <?php
  2.         $ar[0] = 1;
  3.         $ar[1] = 2;
  4.         $ar[ ' d ' ] = 3;
  5.         $ar[ ' b ' ] = 4;
  6.         $ar[5] = 5;
  7.  
  8.  
  9.         foreach ($ar as $k => $v) {
  10.  
  11.             if ($k ===  ' d ' ) {
  12.                 break;
  13.             }
  14.             echo $k .  ' ----- '  . $v .  '
  15. ' ;
  16.         }
  17. ?>
« Последна редакция: 14 Април 2015, 22:52:27 от Avalanche »

Dragonyll

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 26
Отг:Цикълът foreach
« Отговор #5 -: 18 Октомври 2010, 16:44:16 »
OK мерси много, за бързия отговор lamondbg. Много ми помогна. Благодаря

maria11

  • Гост
Re: Цикълът foreach
« Отговор #6 -: 29 Февруари 2016, 01:29:56 »
Здравейте  :)
На какво може да се дължат  тези нотиси.Гледах една от лекциите на Гатака в Телерик и се опитах да пиша кода заедно с него пускайки и спирайки видео-лекцията ,но нещо съм пропуснала,объркала.Тъй като съм начинаеща и не мога да открия ,какво ги е причинило,какво съм сбъркала.Тези PHP Notice за свързани с въртенето на forech в един
Код: HTML
  1.  <select>
  2.   <option value="volvo">Volvo</option>
  3.   <option value="saab">Saab</option>
  4.   <option value="opel">Opel</option>
  5.   <option value="audi">Audi</option>
  6. </select>
  7.  

PHP Notice:  Undefined offset: 3
PHP Notice:  Undefined offset: 1
PHP Notice:  Undefined offset: 2

PHP Notice:  Undefined index:

Какво е нужно да се направи,научи за да се избегнат подобни нотиси.

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Цикълът foreach
« Отговор #7 -: 29 Февруари 2016, 09:05:34 »
А как изглежда въпросния foreach защото с този HTML в този вид няма много какво да се прави? Undefined offset най-често излиза, когато се опитваш да достъпиш несъщестуващ елемент от масив:

Код: PHP
  1. ~ $ php -a
  2. Interactive shell
  3.  
  4. php > $arr = array(); // <- дефиниране на празен масив
  5. php > var_dump($arr); // <- виждаме какво има в него -
  6. array(0) {            // <- нищо, само е дефиниран
  7. }
  8. php > var_dump($arr[3]); // <- опитваме се да извадим елемент с индекс 3 - изважда notice
  9. PHP Notice:  Undefined offset: 3 in php shell code on line 1
  10. NULL
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

maria11

  • Гост
Re: Цикълът foreach
« Отговор #8 -: 29 Февруари 2016, 14:07:57 »
Код: PHP
  1. <?php
  2.  
  3. $pageTitle='Списък';
  4.  
  5. include 'header.php';
  6.  
  7. $groups=array(1=>'Храна',2=>'Транспорт',3=>'Дрехи',4=>'Други' );
  8.  
  9.  
  10.  
  11. ?>
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. <a href="form.php">Добави разход</a>
  22.  
  23.          <table style="border: 1px solid red;">
  24.  
  25.         <tr>
  26.  
  27.                 <td>Дата</td>
  28.  
  29.                 <td>Име</td>
  30.  
  31.                 <td>Сума</td>
  32.  
  33.                         <td>Вид</td>
  34.  
  35.                 </tr>
  36.  
  37.                
  38.  
  39.         <?php
  40.  
  41.         if (file_exists('data.txt')) {
  42.  
  43.                
  44.  
  45.                 $result= file('data.txt');
  46.  
  47.                 foreach ($result as $value) {
  48.  
  49.                         $columns=explode('!', $value);
  50.  
  51.                         echo '<tr>
  52.  
  53.                         <td>'.$columns[0].'</td>  ----> line 27
  54.  
  55.                         <td>'.$columns[1].'</td>        ----> line 28
  56.  
  57.                         <td>'.$columns[2].'</td> ----> line 29
  58.  
  59.                         <td>'.$groups[trim($columns[3])].'</td> ----> line 30
  60.  
  61.                        
  62.  
  63.                         </tr>';
  64.  
  65.                
  66.  
  67.                 }
  68.  
  69.                
  70.  
  71.        
  72.  
  73.  
  74.  
  75.         }
  76.  
  77.  
  78.  
  79.  
  80.  
  81.         ?>
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.          </table>
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99. <?php
  100.  
  101. include 'footer.php';
  102.  
  103.  
  104.  
  105. ?>


Код: PHP
  1. <?php
  2. $pageTitle = 'Форма';
  3. include 'header.php';
  4. $groups=array(1=>'Храна',2=>'Транспорт',3=>'Дрехи',4=>'Други' );
  5.  
  6. if($_POST){
  7.     $username=trim($_POST['username']);
  8.     $username=  str_replace('!', '', $username);
  9.     $sum=(float)$_POST['sum'];
  10.     $selectedGroup=(int)(isset($_POST['group']));
  11.     $error=false;
  12.     if(mb_strlen($username)<2){
  13.         echo '<p>Името е прекалено късо</p>';
  14.         $error=true;
  15.     }
  16.    
  17.     if($sum<0){
  18.         echo '<p>невалиден телефон</p>';
  19.         $error=true;
  20.     }    
  21.     if(!array_key_exists($selectedGroup,$groups)){
  22.         echo '<p>невалидна група</p>';
  23.         $error=true;
  24.     }
  25.    
  26.     if(!$error){
  27.         $result=$username.'!'.$sum.'!'.$selectedGroup."\n";
  28.         if(file_put_contents('data.txt', $result,FILE_APPEND))
  29.         {
  30.             echo 'Записа е успешен';
  31.         }
  32.     }
  33.    
  34.    
  35. }
  36.  
  37.  
  38.  
  39.  
  40. ?>
  41. <a href="index.php">Списък</a>
  42. <form method="POST">
  43.     <div>Име:<input type="text" name="username" /></div>
  44.     <div>Сума:<input type="text" name="sum" /></div>
  45.     <div>
  46.         <select name="group">
  47.             <?php
  48.             foreach ($groups as $key=>$value) {
  49.                 echo '<option value="'.$key.'">' . $value .
  50.                         '</option>';
  51.             }
  52.             ?>
  53.         </select>          
  54.     </div>        
  55.     <div><input type="submit" value="Добави" /></div>
  56. </form>
  57. <?php
  58. include 'footer.php';
  59. ?>

В line 30  дава offset. Идеята беше да има 4 колони ,като в първата се постави текуща дата,а в останалите- име ,сума и вид на разхода.В цялостен вид трябваше да има  страница в която да се показват направените до момента разходи под формата на таблица и друга страница в която да има форма за въвеждане на съответните данни.И някъде в цялото писане и гледане в екрана се оплетох  :'( Единствено искам да се науча да боравя грамотно с PHP .
Благодаря за отговора "когато се опитваш да достъпиш несъщестуващ елемент от масив" ,научих нещо ново.
« Последна редакция: 29 Февруари 2016, 14:21:34 от maria11 »

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Цикълът foreach
« Отговор #9 -: 29 Февруари 2016, 19:21:16 »
Код: PHP
  1. $result = $username . '!' . $sum . '!' . $selectedGroup . "\n";

Тоя ред, след като се раздели на полета с explode, ще ти извади 3 елемента. Ако си спомняш от урока с масивите, те почват от 0. Така че в този случай се получава това:
Код: PHP
  1. $columns = explode('!', $value);
  2.  
  3. $columns[0] => $username
  4. $columns[1] => $sum
  5. $columns[2] => $selectedGroup
  6. $columns[3] => Undefined offset 3
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

maria11

  • Гост
Re: Цикълът foreach
« Отговор #10 -: 01 Март 2016, 12:19:17 »
Благодаря ,Avalanche ,сега видях грешката си.
« Последна редакция: 01 Март 2016, 12:29:15 от maria11 »

nikoleta

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 1
  • Публикации: 5
    • Нови-филми.com
Re: Цикълът foreach
« Отговор #11 -: 11 Март 2016, 15:41:02 »
чудесна тема :) Определено има решения също на някой мой проблеми.
Винаги нови филми - Novi filmi