计入维数组和PHP

时间:2016-03-14 17:41:53

标签: php arrays multidimensional-array

我希望在此代码中显示通过和失败学生的数量(如果得分大于50则通过,否则失败)。

<?php
$students= array(
  array (100, 'Ali',78),
   array (200, 'Khalied',50),
   array (300, 'Fatema',44),
   array (400, 'Sumaya',80),
);

  ?>


<table border="1">
  <tr>
  <th>ID</th>
  <th>Name</th>
  <th>Score</th>
  </tr>
  
  <?php

  foreach($students as $student){
  echo'<tr>';
  foreach($student as $item){
   echo "<td>$item</td>";
 }
 echo '</tr>';
}
$filled_array=$students[0];
 $count=count($filled_array);
 echo $count;
?>

4 个答案:

答案 0 :(得分:1)

我要做的第一件事是通过添加键来重构学生数组。

<?php
    $students= array(
        array ('ID'=>100, 'Name'=>'Ali','Score'=>78),
        array ('ID'=>200, 'Name'=>'Khalied','Score'=>50),
        array ('ID'=>300, 'Name'=>'Fatema','Score'=>44),
        array ('ID'=>400, 'Name'=>'Sumaya','Score'=>80),
    );
?>

然后,您可以修改循环以根据具有其他数组的键来跟踪分数。

<?php
    $resultsArray = array('Pass'=>0, 'Fail'=>0);
    foreach($students as $student){
        if( $student['Score'] > 50 ){ // PASS
             $resultsArray['Pass']++;
        } else { // FAIL
             $resultsArray['Fail']++;
        }
    }
?>

答案 1 :(得分:0)

<?php
$students   = array(
                array (100, 'Ali',78),
                array (200, 'Khalied',50),
                array (300, 'Fatema',44),
                array (400, 'Sumaya',80),
            );
$passed     = $failed   = 0;
?>
<table border="1">
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Score</th>
    </tr>
    <?php
    foreach($students as $student) {
        $getMarks   = $student[2];
        $getMarks>50 ? $passed++ : $failed++;
        echo '<tr><td>'.implode("</td><td>", $student).'</td></tr>';
    }
    ?>
</table>
Passed : <?php echo $passed; //prints 2 ?><br>
Failed : <?php echo $failed; //prints 2 ?> 

以上是您需要的摘要。

首先,通过避免循环并通过添加implode来代替循环来提高性能。

使用值passed初始化了两个变量failed0,并在循环内有条件地递增了(if marks greater than 50)

答案 2 :(得分:0)

这无法实现您的目标。

$filled_array=$students[0];
$count=count($filled_array);
echo $count;

$students[0]是数组[100, 'Ali',78],所以计算它每次都会返回3。

由于您已经在学生列表上循环,只需在循环之前添加一个计数器,并为每个通过的学生增加一个。

$passing_count = 0;                // start at zero
foreach($students as $student) {
    if ($student[2] > 50) {        // student[2] is the grade
        $passing_count++;          // increment count if passing
    }
    echo'<tr>';
    foreach($student as $item) {
        echo "<td>$item</td>";
    }
}

如果您想查找失败学生的数量,您可以在循环后从$passing_count(所有学生)中减去count($students)(通过学生)。

答案 3 :(得分:0)

您可以在迭代学生时评估通过/失败,并在结尾显示结果,如下所示:

<?php
$students= array(
  array (100, 'Ali',78),
   array (200, 'Khalied',50),
   array (300, 'Fatema',44),
   array (400, 'Sumaya',80),
);

?>
<table border="1">
  <tr>
  <th>ID</th>
  <th>Name</th>
  <th>Score</th>
  </tr>
<?php
    $fail = 0;
    $pass = 0;
  foreach($students as $student){
      ($student[2] <= 50 ? $fail++ : $pass++);
  echo'<tr>';
  foreach($student as $item){
   echo "<td>$item</td>";
 }
 echo '</tr>';
}
echo '</table>';
echo 'Pass: ' . $pass;
echo '<br />';
echo 'Fail: ' . $fail;
?>

这是Fiddle Demo