一個關於php兩個陣列compare實踐

laihaibo發表於2019-02-16

之前一直寫前端,入職新公司後,讓我開始管理後臺。做了幾天,不得不福氣,php 5是世界上第二好的語言。那第一呢?當然是php 7啦。

what

業務上需要做一個投票系統,有一步是需要確認得分,處於安全性的考慮,肯定是要放在後臺來做的。由於對php的陣列方法不太熟悉(題外話,對於我這個一開始上手js的人來說,php的陣列更像是js的array和object的混合體)。搞了半天,終於有了以下的程式碼。

how

先宣告下資料結構

1、前端提交的answer陣列

$answers = [
      "1" => 1,
      "2" => 2
      ];

2、後端從伺服器獲取的答案陣列

$questions = [
        [
          "id" => 1,
          "value" => 1
        ],
        [
          "id" => 2,
          "value" => 3
        ]
      ];

進入正片

js中,陣列的順序並不是固定的,在不同的環境下每個子項的順序不同,不知道php中是,但出於這種先入為主的概念,我對問題和答案的比較,做了一些校驗。

  for($i=0;$i<count($questions) ; $i++) {  //起手就是一個for迴圈,以$questions的長度來迴圈,避免$answer提交出錯
        $key = $questions[$i][`id`];  // 設定key,從$questions中取出id作為key來查詢
        $a = array_key_exists($key, $answers);  //php中鍵名不區分型別
        if($a && ($questions[$i][`value`] == $answers[$key])) {  //如果$answer存在鍵值,再判斷是否兩個值相同,如果相同計數器加1
          $count++;
        }

      }

      print_r($count / count($questions) );  //計算百分比

心得

php中陣列方法仍需學習和習慣,通過前端遷就後端的方式可以實現大部分操作,但並不是長久之計

相關文章