douxian4376
2016-09-25 15:50
浏览 85
已采纳

为什么这个PHP foreach不会遍历从json字符串获取信息的数组中的每个项目?

I have this json string that it's stored as text in a mysql database (I have that in a "cronograma" field).

This is what $row['cronograma'] outputs:

{"fecha":["02 enero","05 enero","20 enero","22 enero","25 enero"],"bolilla":["22","26","15","28","33"],"docente":["Juan","Pedro","Lidia","Maxima","Luis"]}

And I want to extract the information from it, and presented it in screen.

This is how I extract the information with json_decode() and loop through it with a foreach:

    $cronograma = json_decode($row['cronograma'], true);
    $cant = count($cronograma['fecha']);
    echo $cant.'<br>'; //this outputs 5
    $i = 0;
      foreach ($cronograma as $key => $value) {
          echo $i;
          $fecha = $cronograma['fecha'][$i];
          $bolilla = $cronograma['bolilla'][$i];
          $docente = $cronograma['docente'][$i];

          echo "<b>Fecha:</b> $fecha <b>Bolilla:</b> $bolilla <b>Docente:</b> $docente<br>";

          if ($i < $cant) $i++;
      }  

Now, my problem is that it won't output the five items in the array, but just three, and I don't understand why. Even if I change ($i < $cant) to ($i < 5), it still outputs only 3.

This is the output:

0Fecha: 02 enero Bolilla: 22 Docente: Juan

1Fecha: 05 enero Bolilla: 26 Docente: Pedro

2Fecha: 20 enero Bolilla: 15 Docente: Lidia

And this is what it should be:

0Fecha: 02 enero Bolilla: 22 Docente: Juan

1Fecha: 05 enero Bolilla: 26 Docente: Pedro

2Fecha: 20 enero Bolilla: 15 Docente: Lidia

3Fecha: 22 enero Bolilla: 28 Docente: Maxima

4Fecha: 25 enero Bolilla: 33 Docente: Luis

What am I missing?

图片转代码服务由CSDN问答提供 功能建议

我有这个json字符串,它作为文本存储在mysql数据库中(我在“cronograma”字段中有这个字符串) )

$ row ['cronograma'] 输出:

{“ fecha“:[”02 enero“,”05 enero“,”20 enero“,”22 enero“,”25 enero“],”bolilla“:[”22“,”26“,”15“,” 28" , “33”], “docente”:[ “涓”, “佩德罗”, “利迪娅”, “最大值”, “路易斯”]}

我想从中提取信息,并在屏幕上显示。

这是我用 json_decode()提取信息并循环遍历它的方法 使用foreach:

  $ cronograma = json_decode($ row ['cronograma'],true); 
 $ cant = count($ cronograma ['fecha']);  
 echo $ cant。'&lt; br&gt;';  //这输出5 
 $ i = 0; 
 foreach($ cronograma as $ key =&gt; $ value){
 echo $ i; 
 $ fecha = $ cronograma ['fecha'] [$ i]  ; 
 $ bolilla = $ cronograma ['bolilla'] [$ i]; 
 $ docente = $ cronograma ['docente'] [$ i]; 
 
 echo“&lt; b&gt; Fecha:&lt; /  b&gt; $ fecha&lt; b&gt; Bolilla:&lt; / b&gt; $ bolilla&lt; b&gt; Docente:&lt; / b&gt; $ docente&lt; br&gt;“; 
 
 if if($ i&lt; $ cant)$ i ++  ; 
} 
   
 
 

现在,我的问题是它不会输出数组中的五个项目,只会输出三个,我不明白为什么 。 即使我将($ i&lt; $ cant)更改为($ i&lt; 5),它仍然只输出3。 < p>这是输出:

  0Fecha:02 enero Bolilla:22 Docente:Juan 
 
1Fecha:05 enero Bolilla:26 Docente:Pedro 
 
2Fecha:20  enero Bolilla:15 Docente:Lidia 
   
 
 

这就应该是这样的:

  0Fecha:02 enero  Bolilla:22 Docente:Juan 
 
1Fecha:05 enero Bolilla:26 Docente:Pedro 
 
2Fecha:20 enero Bolilla:15 Docente:Lidia 
 
3'Fecha:22 enero Bolilla:28 Docente:Maxima 
 
4'Fecha:  25 enero Bolilla:33 Docente:Luis 
   
 
 

我缺少什么?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • doude4201 2016-09-25 16:16
    已采纳

    Because $cronograma contains 3 items; fecha, bolilla & docente, so I recommend changing your loop like:

        $cronograma = json_decode($row['cronograma'], true);
        $cant = count($cronograma['fecha']);
        echo $cant.'<br>'; //this outputs 5
    
          for ($i = 0; $i < $cant; $i++) {
              echo $i;
              $fecha = $cronograma['fecha'][$i];
              $bolilla = $cronograma['bolilla'][$i];
              $docente = $cronograma['docente'][$i];
    
              echo "<b>Fecha:</b> $fecha <b>Bolilla:</b> $bolilla <b>Docente:</b> $docente<br>";
          }  
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dragon4587 2016-09-25 16:17

    You just need a while loop to go through $cant

    <?php
    
    $cronograma = '{"fecha":["02 enero","05 enero","20 enero","22 enero","25 enero"],"bolilla":["22","26","15","28","33"],"docente":["Juan","Pedro","Lidia","Maxima","Luis"]}';
    
    $cronograma = json_decode($cronograma, true);
    $cant = count($cronograma['fecha']);
    echo $cant.'<br>'; //this outputs 5
    $i = 0;
    
    while ($i < $cant){
        $fecha = $cronograma['fecha'][$i];
        $bolilla = $cronograma['bolilla'][$i];
        $docente = $cronograma['docente'][$i];
    
        echo "<b>Fecha:</b> $fecha <b>Bolilla:</b> $bolilla <b>Docente:</b> $docente<br>";
    
        $i++;
    }
    
    评论
    解决 无用
    打赏 举报
  • dre75230 2016-09-25 16:20

    i think your foreach loop causing the problem...you are using 'cronograma' as your foreach loop array which has only three elements 'fecha' ,'bolilla' & 'docente' so the loop runs only thrice no matter what value you set for variable i against 'cant'

    $x='{"fecha":["02 enero","05 enero","20 enero","22 enero","25 enero"],"bolilla":["22","26","15","28","33"],"docente":["Juan","Pedro","Lidia","Maxima","Luis"]}';
    $cronograma = json_decode($x, true);
        $cant = count($cronograma['fecha']);
        echo $cant.'<br>'; //this outputs 5
        $i = 0;
          for($i=0;$i<$cant;$i++) {
              echo $i;
              $fecha = $cronograma['fecha'][$i];
              $bolilla = $cronograma['bolilla'][$i];
              $docente = $cronograma['docente'][$i];
    
              echo "<b>Fecha:</b> $fecha <b>Bolilla:</b> $bolilla <b>Docente:</b> $docente<br>";
    
          }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题