我有一个多维$array
。其中一列是customer name
。
我必须在db中保存array
的所有行,但具有相同customer name
的行除外。
我编写了一个名为searchMultidimensionalArray
的函数,它创建了一个包含不同customer name
的所有行的数组。在db中插入行之前,我搜索该数组中的当前行。如果存在,我什么都不做,否则我存储当前行。
这是我的解决方案,但它无法正常工作。
public function searchMultidimensionalArray($valueName, $arrayCustomer)
{
foreach ($arrayCustomer as $key => $val) {
if ($val['name'] === $valueName) {
return true;
}
return false;
}
}
这是我遍历数组的地方:
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,
];
}
}
答案 0 :(得分:0)
除非我误解你的情况,否则可以通过几种方式有效地实现预期的结果。
数据库方式:设置数据库表,以便name
列是唯一键。这样,如果您尝试复制INSERT
,该行将根据需要失败。
PHP方式:我建议array_column()和array_unique()这样:
$unique_customer_names=array_unique(array_column($arrayCustomer,'customer_name'));
然后使用$unique_customer_names
来识别重复项。
我希望其中一个选项能为您提供更好的解决方案。