Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-我的循环错误_Php_Loops - Fatal编程技术网

PHP-我的循环错误

PHP-我的循环错误,php,loops,Php,Loops,我试图将多维对象数组中的不同值推入数组 我的目标似乎与“章节”中的一样: object(Doctrine\ORM\PersistentCollection)[5301] private 'snapshot' => array (size=3) 0 => object(Video2Learn\BddBundle\Entity\Chapitre)[5335] private 'id' => int 1

我试图将多维对象数组中的不同值推入数组

我的目标似乎与
“章节”
中的一样:

 object(Doctrine\ORM\PersistentCollection)[5301]
  private 'snapshot' => 
    array (size=3)
      0 => 
        object(Video2Learn\BddBundle\Entity\Chapitre)[5335]
          private 'id' => int 1
          private 'titre' => string 'C01' (length=3)
          private 'Videos' => 
            object(Doctrine\ORM\PersistentCollection)[5371]
              ...
      1 => 
        object(Video2Learn\BddBundle\Entity\Chapitre)[5373]
          private 'id' => int 2
          private 'titre' => string 'C02' (length=3)
          private 'Videos' => 
            object(Doctrine\ORM\PersistentCollection)[5374]
              ...
      2 => 
        object(Video2Learn\BddBundle\Entity\Chapitre)[5376]
          private 'id' => int 3
          private 'titre' => string 'C03' (length=3)
          private 'Tutoriel' => 
          private 'Videos' => 
            object(Doctrine\ORM\PersistentCollection)[5377]
              ...
“视频”

0 => 
        object(Video2Learn\BddBundle\Entity\Video)[5831]
          private 'id' => int 4
          private 'titre' => string 'qzesthbvs s hgqsd' (length=17)
          private 'prix' => int 0
          private 'level' => string 'hard' (length=8)
1 => 
        object(Video2Learn\BddBundle\Entity\Video)[5831]
          private 'id' => int 4
          private 'titre' => string 'qzesthbvs s hgqsd' (length=17)
          private 'prix' => int 0
          private 'level' => string 'noob' (length=8)
在尝试使用PHP之前,我使用Javascript进行了以下操作:

var NIV = [0, 1, 2];
NIV[0] = [];
NIV[1] = [];
NIV[2] = [];
            $.each(e.tuto.Chapiter, function(idx, chapiter) {
                $.each(chapiter.Videos, function(idx, video) {
                    switch (video.level) {
                        case "noob":
                            NIV[0].push(video.level);
                            break;
                        case "medium":
                            NIV[1].push(video.level);
                            break;
                        case "hard":
                            NIV[2].push(video.level);
                            break;
                    }
                });
            });
但是现在我需要在PHP中做同样的事情。我试着这么做,但我不是PHP专家,我想我的循环有问题。。。如何选择“级别”

我做到了:

$NIV = [0, 1, 2];
    $NIV[0] = [];
    $NIV[1] = [];
    $NIV[2] = [];

    foreach ($chap as $section => $video) {
        foreach ($video as $niveau => $value) {
            switch ($value.niveau) {
                case "noob":
                    array_push($NIV[0], ($value.level));
                    break;
                case "medium":
                    array_push($NIV[1], ($value.level));
                    break;
                case "hard":
                    array_push($NIV[2], ($value.level));
                    break;
            }
        }
    }
以下是我的代码的其余部分,用于对所有视频的所有级别进行加权平均:

    $nb_noob = sizeof($NIV[0]);
    $nb_medium = sizeof($NIV[1]);
    $nb_hard = sizeof($NIV[2]);

    $total_niv = $nb_noob + $nb_medium + $nb_hard ;

    $ratio_nb_noob  = $nb_noob / $total_niv;
    $ratio_nb_medium  = $nb_medium / $total_niv;
    $ratio_nb_hard = $nb_hard / $total_niv;

    $weighted_average= $ratio_nb_noob  * 1 + $ratio_nb_medium  * 2 + $ratio_nb_hard * 3;

    $weighted_average= round($weighted_average);

谢谢

我想你想要这样的东西:

$NIV    = [0, 1, 2];
$NIV[0] = 0;
$NIV[1] = 0;
$NIV[2] = 0;

foreach ($Chapter->snapshot as $section => $row) 
{
    foreach ($row->Videos as $niveau => $video) 
    {
        switch ($video->level) 
        {
            case "noob":
                $NIV[0]++;
                break;
            case "medium":
                $NIV[1]++;
                break;
            case "hard":
                $NIV[2]++;
                break;
        }
    }
}
您可以使用
$video->level

现在您不需要函数的大小。只需使用
$NIV[0]
返回
count

这是解决方案:)


这是javascript
switch($value.niveau)
您想要的是php
switch($value['niveau'))
您好!这不起作用,但我认为这几乎是个好结果:)。我编辑了关于对象数组的帖子。。。它改变了什么吗?@Zagloo在更新答案之前,你想推动什么索引,视频级别?视频id?那么什么包含了
$NIV
数组呢?这段代码的最终目的是对所有视频级别进行加权平均。我现在把剩下的代码放进去了。所以我只需要推送每个视频的级别,计算每个不同级别有多少个,然后进行加权average@Zagloo使用新的
命名变量更新了答案,如
$Chapter->snapshot
。当然这个变量我在这方面帮不了你<代码>总是不工作
不工作什么?你有错误吗?您是否转储了它
var_dump($NIV)
$NIV = [0, 1, 2];
    $NIV[0] = 0;
    $NIV[1] = 0;
    $NIV[2] = 0;

    foreach ($chapter as $key => $value) {
        foreach ($value->getVideos() as $index => $val) {
            switch ($val->getLevel()) {
                case "noob":
                    $NIV[0] ++;
                    break;
                case "medium":
                    $NIV[1] ++;
                    break;
                case "hard":
                    $NIV[2] ++;
                    break;
            }
        }
    }


    $total_niv = $NIV[0] + $NIV[1] + $NIV[2];

    $ratio_nb_noob = $NIV[0] / $total_niv;
    $ratio_nb_medium = $NIV[1] / $total_niv;
    $ratio_nb_hard = $NIV[2] / $total_niv;

    $weighted_average = $ratio_nb_noob * 1 + $ratio_nb_medium * 2 + $ratio_nb_hard * 3;
    $weighted_average = round($weighted_average );