【问题标题】:Unable to get associative array value by key无法按键获取关联数组值
【发布时间】:2018-10-26 23:13:30
【问题描述】:

我有 2 页,第一页是为了获得 1 - 5 星评级。

第二个是查看被问问题的统计数据,因此我们可以看到有多少人选择了 Star 1,有多少人选择了 Star 2,等等。

在点击者提交的第一页上,我的 PHP 会创建一个与每个问题(问题 1、问题 2 等)相对应的文本文件,该文件将存储该人评分的 1 到 5 分的值。

在我遇到问题的第二页上,我能够从文本文件中获取值作为关联数组:

-var_dump -

array(3) { ["2 "]=> int(1) ["5 "]=> int(2) ["3 "]=> int(1) }

打印_r

Array ( [2 ] => 1 [5 ] => 2 [3 ] => 1 )

["2"]、["5"] 和 ["3"] 是我的文本文件中的评分,int() 是评分在我的文本文件中计算的次数,这就是我的方式m 获得点击每个问题评分的人数。

我正在尝试做的是当我使用例如键 ["2"] 回显数组以显示整数时!但是每次我尝试这样做时都会收到错误或什么也没有得到,最常见的错误是:

注意:未定义的偏移量:D:\Xampp\htdocs\ECwebpages\Survey-Stats\Survey-Stats.php 第 101 行中的 0 空

如果您需要更多信息,请告诉我。我会得到下面的代码!

 <?php

          $counter = 1; 

          if (file_exists("../Question1.txt") && file_exists("../Question10.txt")){



              $files = "../Question1.txt";


              $lines=file($files);

              $vals = array_count_values($lines);

              foreach($vals as $answers => $keyss ){}

              var_dump($vals["2 "]);



              foreach($lines as $linescntnt => $key){


                  if($key == 1){
                      //count how many poeple click on star 1 and place here 

                      if($answers == '1'){
                          //display how many people clicked on the First rating
                          echo  "<td>".$vals."</td>";
                      }else{
                          echo "<td>-<td>";
                      }
                  }

                  if ($key == 2){
                      //count how many poeple click on star 1 and place here 
                      if($answers == '2'){
                            //display how many people clicked on the Second rating
                          echo  "<td>-</td>";
                      }else{
                          echo "<td>-<td>";
                      }

                  }


                  if($key == 3){
                      //count how many poeple click on star 1 and place here 
                       if($answers == '3'){
                             //display how many people clicked on the Third rating
                        echo  "<td>".$answers."</td>";
                      }else{
                          echo "<td>-<td>";
                      }
                  }
                  if($key == 4){
                      //count how many poeple click on star 1 and place here 
                       if($answers == '4'){
                             //display how many people clicked on the Fourth rating
                        echo  "<td>".$answers."</td>";
                      }else{
                          echo "<td>-<td>";
                      }
                  }
                  if($key == 5){
                      //count how many poeple click on star 1 and place here 
                       if($answers == '5'){
                             //display how many people clicked on the Fifth rating
                        echo  "<td>".$answers."</td>";
                      }else{
                          echo "<td>-<td>";
                      }
                  }


              }
          }



    ?>

【问题讨论】:

  • 大量代码。去掉所有不需要的东西并创建一个最小的可验证的完整示例。 stackoverflow.com/help/mcve
  • 这是一个单维数组,所以你只需要$vals["2 "]而不是$vals["0"]["2 "]
  • @aynber 这也是我所做的,但仍然无法正常工作。
  • var_dump 显示您的密钥为 ["2 "] ["3 "]["5 "] 注意尾随空格 您可以更改密钥的填充方式或更改您的条件使用if($key == "1 ")if($key == "2 ")
  • @ozzy 您正在寻找条件中的数值,但使用字符串值填充数组索引,而字符串值与尾随空格永远不会匹配。当您构建数组时删除空格或转换为数值

标签: php html arrays echo associative-array


【解决方案1】:

经过一段时间的反复试验,我终于能够完成这项工作,@Malovich 在 cmets 中解释说(“当你建立你的数组时,删除空格或转换为数值。”),所以我trim()我的档案$lines

$files = "../Question1.txt";

$lines=file($files);

 --trim-->   $trimmed_array=array_map('trim',$lines); <--

然后我继续数数:

$vals = array_count_values($trimmed_array);

最后为了从键中获取我的值以显示有多少人点击了我所做的特定星星:

 if(isset($vals[1])){

    echo "<td>".$vals[1]."</td>";

 }else{

       echo "<td>0</td>";

  }

$vals 是数组,键([1]、[2] 等)是获取我使用 array_count_values() 时创建的整数。

   if (file_exists("../Question1.txt") && file_exists("../Question10.txt")){
   
   $files = "../Question2.txt";
   
   $lines=(file($files));
   
   $trimmed_array=array_map('trim',$lines);
   
   $vals = array_count_values($trimmed_array);
   
   foreach($vals as $answers => $keys){

    }

    if(isset($vals[1])){

      echo "<td>".$vals[1]."</td>";

    }else{
      echo "<td>0</td>";
    }

    if(isset($vals[2])){

    echo "<td>".$vals[2]."</td>";

    }else{
    echo "<td>0</td>";
    }

    etc...
  
  }else {
  
    echo ' <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>';
    
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多