2017-03-03 87 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来识别重复。

我希望这些选项中的一个为您提供了一个更好的解决方案。