0I have an array ($dataArray) in the following format which is created from a csv file:
The CSV is processed as follows:
function csvstring_to_array($string, $separatorChar = ',', $enclosureChar = '"', $newlineChar = "\n") {
    // @author: Klemen Nagode
    $array = array();
    $size = strlen($string);
    $columnIndex = 0;
    $rowIndex = 0;
    $fieldValue="";
    $isEnclosured = false;
    for($i=0; $i<$size;$i++) {
        $char = $string{$i};
        $addChar = "";
        if($isEnclosured) {
            if($char==$enclosureChar) {
                if($i+1<$size && $string{$i+1}==$enclosureChar){
                    // escaped char
                    $addChar=$char;
                    $i++; // dont check next char
                }else{
                    $isEnclosured = false;
                }
            }else {
                $addChar=$char;
            }
        }else {
            if($char==$enclosureChar) {
                $isEnclosured = true;
            }else {
                if($char==$separatorChar) {
                    $array[$rowIndex][$columnIndex] = $fieldValue;
                    $fieldValue="";
                    $columnIndex++;
                }elseif($char==$newlineChar) {
                    echo $char;
                    $array[$rowIndex][$columnIndex] = $fieldValue;
                    $fieldValue="";
                    $columnIndex=0;
                    $rowIndex++;
                }else {
                    $addChar=$char;
                }
            }
        }
        if($addChar!=""){
            $fieldValue.=$addChar;
        }
    }
    if($fieldValue) { // save last field
        $array[$rowIndex][$columnIndex] = $fieldValue;
    }
    return $array;
}
$dataArray = csvstring_to_array( file_get_contents("ACS_MONTHLY_DUES - Jun 2020.csv"));
echo '<pre>';
print_r($dataArray);
echo '</pre>';
    Array
    (
        [0] => Array
            (
                [0] =>  REGION
                [1] =>  CENTER
                [2] =>  SUBSCRIBER CODE
                [3] =>  SUBSCRIBER_ID
                [4] =>  SUBSCRIBERNAME
                [5] =>  SUBSCRIBERPHONE
                [6] =>  BOUQ
                [7] =>  STB_NOS
                [8] => LAST MONTH PAYMENT
                [9] =>  AMOUNT_DUE
                [10] =>  MINIMUM_RECHARGE
                [11] =>  TOTAL_PAYABLE
                [12] =>  EXPIRY_DATE
                [13] => PAY_AMOUNT
                [14] => CURRENT BALANCE
            )
        [1] => Array
            (
                [0] => XXX
                [1] => XXX
                [2] => UK91002970
                [3] => 61610070
                [4] => XXXXX
                [5] => XXXXXX
                [6] => UK FTA-1
                [7] => 1
                [8] => 0
                [9] => 0
                [10] => 221
                [11] => 221
                [12] => 08-06-2020
                [13] => 0
                [14] => 0
            )
  [2] => Array
    (
        [0] => XXXX
        [1] => XXXXX
        [2] => UK91002971
        [3] => 61610217
        [4] => XXXXXXX
        [5] => XXXXXXX
        [6] => UK FTA-1
        [7] => 1
        [8] => 0
        [9] => 8
        [10] => 243
        [11] => 251
        [12] => 06-06-2020
        [13] => 0
        [14] => 0
    )  
)
I need to insert it in my mysql DB using PDO. I tried the following and it is not working:
include_once('inc/connstring.inc.php');
$stmt = $conn->prepare("INSERT INTO customer(subscriber_code, subscriber_id, region,center,subscriber_name,subscriber_phone,package,stb_nos,last_month_payment,amount_due,minimum_recharge,total_payable,expiry_date,pay_amount,current_balance)
VALUES(:subscribercode, :subscriberid, :region,:center,:subscribername,:subscriberphone,:package,:stbnos,:lastmonthpayment,:amountdue,:minimumrecharge,:totalpayable,:expirydate,:payamount,:currentbalance)");
foreach($dataArray as $row) {
$stmt->execute(array(
':subscribercode' =>  $row['SUBSCRIBER CODE'], 
':subscriberid' => $row['SUBSCRIBER_ID'],
':region' => $row['REGION'],
':center' => $row['CENTER'],
':subscribername' => $row['SUBSCRIBERNAME'],
':subscriberphone' => $row['SUBSCRIBERPHONE'],
':package' => $row['BOUQ'],
':stbnos' => $row['STB_NOS'],
':lastmonthpayment' => $row['LAST MONTH PAYMENT'],
':amountdue' => $row['AMOUNT_DUE'],
':minimumrecharge' =>$row['MINIMUM_RECHARGE'],
':totalpayable' => $row['TOTAL_PAYABLE'],
':expirydate' => $row['EXPIRY_DATE'],
':payamount' => $row['PAY_AMOUNT'],
':currentbalance' => $row['CURRENT BALANCE']));
}
It is not working. Invalid argument supplied for foreach()
What am i doing wrong?? Requesting help from php experts...
Thanks in advance.
update: Solved myself. Changed code to convert CSV to an associative array and now everything works fine.
Array
(
    [0] => Array
        (
            [REGION] => XXX
            [CENTER] => XXXXX
            [SUBSCRIBER CODE] =>UK91002970
            [SUBSCRIBER_ID] => 61610070
            [SUBSCRIBERNAME] => XXXXX
            [SUBSCRIBERPHONE] => XXXXXXX
            [BOUQ] => UK FTA-1
            [STB_NOS] => 1
            [LAST MONTH PAYMENT] => 0
            [AMOUNT_DUE] => 0
            [MINIMUM_RECHARGE] => 221
            [TOTAL_PAYABLE] => 221
            [EXPIRY_DATE] => 08-06-2020
            [PAY_AMOUNT] => 0
            [CURRENT BALANCE] => 0
        )