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)
您想要的是phpswitch($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 );