Я пытаюсь заменить 'category names'
на соответствующие 'category id'
, когда время импорта CSV в таблицу mysql.
может кто-нибудь помочь мне с правильным подходом замены заголовков csv с идентификаторами белого списка вforeach php?
ниже приведен мой скрипт, который я пробовал, ключи не заменяются, как ожидалось.
причина, по которой я делаю эту замену имени с идентификатором, может быть несколькоисправление орфографических изменений в именах категорий в основной таблице в будущем.
, поэтому в то время мне нужно обновить таблицу пакетов, а это не очень хорошая идея, чтобы избежать этого, я заменяю имя категории на 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");
}