PHP - 在多维数组中搜索值

时间:2017-03-03 16:31:06

标签: php arrays oop multidimensional-array

我有一个多维$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,
        ];
    }
}

1 个答案:

答案 0 :(得分:0)

除非我误解你的情况,否则可以通过几种方式有效地实现预期的结果。

  1. 数据库方式:设置数据库表,以便name列是唯一键。这样,如果您尝试复制INSERT,该行将根据需要失败。

  2. PHP方式:我建议array_column()array_unique()这样:

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

    然后使用$unique_customer_names来识别重复项。

  3. 我希望其中一个选项能为您提供更好的解决方案。