PHP循环中的PHP csv头键替换

时间:2018-05-22 07:09:59

标签: php foreach while-loop

我尝试在导入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");
    }

0 个答案:

没有答案