Невозможно получить значение ассоциативного массива по ключу - PullRequest
0 голосов
/ 16 мая 2018

У меня есть 2 страницы, первая страница должна захватить 1 - 5 звезд.

Второй - просмотреть статистику по задаваемым Вопросам, чтобы мы могли видеть, как люди выбирают Звезду 1, сколько людей выбирают Звезду 2 и т. Д.

На первой странице, когда пользователь нажимает кнопку «Отправить», мой PHP создает текстовый файл, соответствующий каждому вопросу (Вопрос 1, Вопрос 2 и т. Д.), В котором будут храниться значения 1–5 оценок того, что оценил пользователь.

На второй странице, где у меня возникла проблема, я смог получить значения из текстового файла в виде ассоциативного массива:

-var_dump -

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

print_r

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

["2"], ["5"] и ["3"] - это оценки, которые есть в моем текстовом файле, int () - это то, сколько раз рейтинг был подсчитан в моем текстовом файле, как я m получает количество людей, кликнувших по рейтингу для каждого вопроса.

То, что я пытаюсь сделать, это когда я отображаю массив, например, клавишей ["2"] для отображения целого числа! но каждый раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке или ничего не получаю. Наиболее распространенная ошибка, которую я получаю:

Примечание: неопределенное смещение: 0 в D: \ Xampp \ htdocs \ ECwebpages \ Survey-Stats \ Survey-Stats.php в строке 101 NULL

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. У меня будет код ниже!

 <?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>";
                      }
                  }


              }
          }



    ?>

1 Ответ

0 голосов
/ 17 мая 2018

После некоторого времени проб и ошибок я наконец смог сделать эту работу, @Malovich объяснил в комментариях («Когда вы создаете свой массив, убирайте пробелы или конвертируйте в числовые значения»), и поэтому я 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>';
    
} 
...