2016-09-20 90 views
0

我有一個PHP函數,其中傳遞了一個字符串或列名稱數組。不幸的是,這取決於我得到的列名的數量會變得有點麻煩和麻煩。根據存在的數組鍵的數量動態構建if語句

因此,是否有一種方法可以重寫我的if語句,以便我可以根據數組中的元素數量動態地生成條件?

我通常會運行一次檢查來查看數組中是否有值,但由於這些是另一個數組的關鍵值,因此會使事情更加複雜。以下是我目前的代碼。

private function pushToArray($list, $columnName, $date) { 
    $array = []; 
    foreach($list as $item) { 
     if (is_array($columnName)){ 
      if ($date == $item[$columnName[0]] || $date == $item[$columnName[1]]) { 
       array_push($array, $item); 
      } 
     } else { 
      if ($date == $item[$columnName]) { 
       array_push($array, $item); 
      } 
     } 
    } 
    return $array; 
} 

正如在這裏可以看到,在我的元素陣列增加,我將不得不增加額外的,如果條件來處理更大的陣列設置。我想避免的事情。

編輯: 現在,我使用laravel作爲我的應用程序的框架。我正在嘗試生成一個數組,用於填充即將發生的事件系統的視圖。 這裏是當前呼叫的樣本:

$separatedArray = $this->pushToArray($this->separatedList(), 'destroyed_date', $currentDate); 
$travelsArray = $this->pushToArray($this->travelsList(), ['leave_date','return_date'], $currentDate); 
$trainingUsersArray = $this->pushToArray($this->trainingUsersList(), 'due_date', $currentDate); 

下面是一些代碼的樣本之前,我把它搬到自己的功能。

 $separatedArray = $travelsArray = $trainingUsersArray = []; 
     $currentDate = $date->format('Y-m-d'); 

     foreach($separatedList as $user) { 
      if ($currentDate == $user->destroyed_date) { 
       array_push($separatedArray, $user); 
      } 
     } 

     foreach($travels as $travel) { 
      if ($currentDate == $travel->leave_date || $currentDate == $travel->return_date) { 
       array_push($travelsArray, $travel); 
      } 
     } 
     foreach($trainingUsers as $trainingUser) { 
      if ($currentDate == $trainingUser->due_date) { 
       array_push($trainingUsersArray, $trainingUser); 
      } 
     } 
+0

聽起來像你真正擁有的是數據庫設計問題。你能否詳細說明你的真實目標是什麼,並提供一些示例數據?請提供示例輸入和所需輸出。 – Dave

+0

我已更新我的原始查詢,我希望這可以幫助。 –

回答

1

用foreach循環替換第一個if代碼的代碼。

if (is_array($columnName)) { 
    foreach ($columnName as $column) { 
     if ($date == $item[$column]) { 
      array_push($array, $item); 
     } 
    } 
} 
+0

我不知道爲什麼我不能想到這一點。謝謝。我將不得不添加一張支票以確保我們不會多次添加相同的商品,但這正是我所尋求的。 –