数组中的Foreach循环以及如何包含它

我一直在努力解决这个问题一个星期,我没有更多的select,只能在这里问一个问题在计算器。

我目前使用PHP Spout来读取一个xlsx文件的行,数组看起来像这样

Array ( [Name] => abcd1234 [Address] => abcd1234 [Number] => abcd1234 ) Array ( [Name] => abcd1234 [Address] => abcd1234 [Number] => abcd1234 ) Array ( [Name] => abcd1234 [Address] => abcd1234 [Number] => abcd1234 ) 

foreach循环看起来像这样

 // Number of sheet in excel file foreach ($reader->getSheetIterator() as $sheet) { // Number of Rows in Excel sheet foreach ($sheet->getRowIterator() as $row) { // It reads data after header. In the my excel sheet, // header is in the first row. if ($count1 > 1) { // Data of excel sheet $data['Name'] = $row[0]; $data['Address'] = $row[1]; $data['Number'] = $row[2]; //Here, You can insert data into database. //print_r($data); //$sql = mysqli_query($connection, "INSERT INTO address(Name, Address, Number) VALUES ('$row[0]', '$row[1]', '$row[2]')"); foreach ($data as $key => $value) { $value = trim($value); if (empty($value)){ echo $output = "Row ".$count1." Column ".$key." is empty <br/>"; } } } $count1++; } } 

我有一个问题,我需要循环所有数组,并find我设法做的每列上的缺less的行,现在我需要忽略或计数行上的重复值。 我试着做array_unique,但它没有在我使用的数组上工作。

我也尝试插入我的数组到另一个数组,但我也有问题插入。 我可能有声明我的数组有问题,但我仍然有一些问题。 我如何忽略多个不同数组上的重复项,或者如何将所有单独的数组合并到一个foreach循环中的数组中? 对不起,我有点新的arrays在PHP和谢谢,如果有人正在阅读此。

编辑:我瞄准的输出是从xlsx文件计数数组/行中的缺失值的数量。 这就像示例代码中的foreach循环一样。 例:

 Row 213 Column Name is empty Row 214 Column Name is empty Row 214 Column Address is empty 

这就是当我从xlsx文件回显行上的缺失值时的样子。

现在我需要validationxlsx文件是否有重复的行。 我第一个最初的想法是要么重复行重复值即

 Row 213 Column Name is has duplicates Row 214 Column Name is has duplicates Row 214 Column Address is empty 

但是一切都变得复杂了,这导致我尝试使用array_unique,但也有问题,因为数组由xlsx文件呈现的方式。

正如你对问题的评论中所build议的那样,使用预先准备的陈述

至于你的问题的解决scheme,当SQL查询执行并成功插入数据时,将唯一标识符添加到数组。 在将新数据插入数据库之前,请检查唯一标识符是否已经插入插值数组中。 我正在打电话,否则我会提供一个例子。 但是这应该有所帮助。

我希望这会让你走:

 $data = array(); foreach ($sheet->getRowIterator($startRow = 2) as $row) { $data[] = array('Name' => $row[0], 'Address' => $row[1], 'Number' => $row[2]) } $names = array_column($data, 'Name'); $addresses = array_column($data, 'Address'); $numbers = array_column($data, 'Number'); $unique_names = array_unique($names); $unique_addresses = array_unique($addresses); $unique_numbers = array_unique($numbers); $dup_names = array_diff($names, $unique_names); $dup_addresses = array_diff($names, $unique_addresses); $dup_numbers = array_diff($names, $unique_numbers); 

一旦你插入到你的数据库中,下面是你如何使用一个准备好的语句:

 $stmt = $connection->prepare("INSERT INTO address(Name, Address, Number) VALUES (?, ?, ?)"); foreach ($data as $row) { $stmt->bind_param('sss', $row['Name'], $row['Address'], $row['Number']); $stmt->execute(); }