2017-03-03 88 views
0

我有一個多維$array。其專欄之一是customer name。 我必須將array的所有行保存在一個數據庫中,但具有相同的customer name的行除外。PHP - 搜索多維數組內的值

我寫了一個叫做searchMultidimensionalArray的函數,它創建一個數組,其中包含所有具有不同customer name的行。在db中插入一行之前,我搜索該數組中的當前行。如果存在,我什麼都不做,否則我存儲當前行。

這是我的解決方案,但它工作不正常。

public function searchMultidimensionalArray($valueName, $arrayCustomer) 
{ 
    foreach ($arrayCustomer as $key => $val) { 
     if ($val['name'] === $valueName) { 
      return true; 
     } 

     return false; 
    } 
} 

這是通過陣列I循環:

for ($i = 1; $i < $countArray; $i++) { 
    $customer = new Customer(); 
    $customer->setName($customerName); // I already have $customerName data 
    if ($i == 1) { 

     $arrayCustomer[$i] = [ 
      'name' => $customerName, 
     ]; 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($customer); 
     $em->flush(); 

    } 
    if ($this->searchMultidimensionalArray($customerName, $arrayCustomer) == true) { 

     $repository = $this->getDoctrine()->getRepository('AppBundle:Customer'); 
     $customer = $repository->findOneBy(['name' => $customerName]); 
    } else { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($customer); 
     $em->flush(); 

     $arrayCustomer[$i] = [ 
      'name' => $customerName, 
     ]; 
    } 
} 
+1

問題是? – Condorcho

+0

@Condorcho具有相同「客戶名稱」的行全部存儲在數據庫中 – Dygne

回答

0

除非我誤解你的情況下,預期的結果可以有效地實現了幾個方面。

  1. 的DB方式:使name列是唯一鍵設置你的數據庫表。這樣,如果您嘗試將INSERT複製一份,則該行將根據需要失敗。

  2. PHP的方式:我會建議array_column()array_unique()這樣的:

    $unique_customer_names=array_unique(array_column($arrayCustomer,'customer_name')); 
    

    然後使用$unique_customer_names來識別重複。

我希望這些選項中的一個爲您提供了一個更好的解決方案。