我尝试在导入CSV时将'category names'
替换为各自的'category id'
进入mysql表。
有人可以帮助我用foreach php中的白名单ID替换csv头文件吗?
以下是我试过的剧本, 密钥没有按预期更换。
我使用id替换此名称的原因是,将来可能会对主表中的类别名称进行一些小的拼写更改。
所以当时我需要更新批处理表,这也不是一个好主意,为了避免这种情况,iam用id替换类别名称并插入批处理表。
<?php
$category_id = $post['category_id'];
//query master table and get category details
$header_qry = $con->prepare("SELECT category_name,category_id FROM category where category_id=:category_id and status=1");
$header_qry->bindParam(':category_id', $category_id);
$header_qry->execute();
while ($header_qry_data = $header_qry->fetch(PDO::FETCH_ASSOC)) {
$header_names[] = $header_qry_data['category_name'];
$header_name_id[] = $header_qry_data;
}
$keys = [];
$csvheders = fgetcsv($source);
foreach ($csvheders AS $value) {
if ($value) {
$keys[] = $value;
}
}
if(count(array_intersect($header_names, $csvheders)) !== count($csvheders)) {
$messageSession[] = array('type' => 'danger', 'message' => 'Columns Mismatch');
$_SESSION['alert_messages'] = $messageSession;
header("location:cat_upload.php");
} else {
function searchMultiArrays($val, $array) {
foreach ($array as $element) {
if ($element['category_name'] == $val) {
return $element['category_id'];
}
}
return null;
}
while ($csvdata = fgetcsv($source)) {
foreach ($csvdata as $k => $v) {
unset($csvdata[$k]);
// set the key (based on the keys array established above)
$keyvals = $keys[$k];
$new_key = searchMultiArrays("$keyvals", $header_name_id);
$csvdata[$new_key] = $v;
}
$cat_details = json_encode($csvdata, JSON_FORCE_OBJECT);
//insert category details into batch table
$insert_json = $con->prepare("insert into batch_detail (batch_id,cat_details) values (:batch_id,:cat_details)");
$insert_json->bindParam(':batch_id', $batch_id);
$insert_json->bindParam(':cat_details', $cat_details);
$insert_json->execute();
}
$messageSession[] = array('type' => 'success', 'message' => 'Details Uploaded Successfully');
$_SESSION['alert_messages'] = $messageSession;
header("location:upload_summary.php");
}