Skip to content
Advertisement

PHP inserting value only once

I am trying to add categories in a database. Things is the script is reading the categories from a product list, therefore there are duplicate values as it’d be like reading

PRODUCT NAME – DETAIL 1 – DETAIL 2 – CATEGORY

Rinse and repeat.

I have my code down and the insert works but it stops at the first product’s category value as if I put it out of my foreach loop.

<?php
$filecsv = 'pricelist.csv';

$rows = file($filecsv);

foreach($rows as $row){
    $c1 = explode('|', $row);
    if($c1['6'] == "not available"){
        unset($c1);
        continue;
    }

    //echo '<pre>'.print_r($c1[9], true).'</pre>';

    $bool = Db::getInstance()->executeS("SELECT CASE WHEN EXISTS (SELECT * FROM b2b_category WHERE name_b2bcategory IN ('".$c1[9]."') ) THEN true ELSE false end");
    foreach($bool[0] as $keyB => $valueB){
        $verify = $valueB;
        $count = 0;
        if($valueB != 1){
            Db::getInstance()->execute("INSERT INTO b2b_category (id_b2bcategory, name_b2bcategory, position_b2bcategory, active_b2bcategory) VALUES (".$count.", '".$c1[9]."', '0', '0')");
            $count++;
        //echo '<pre>'.print_r($valueB, true).'</pre>';
        }
    }
}
?>

I also want to point out my $c1 variable has multiple arrays. It’s not one multi-dimensional array.

So it’s like

Array { etc }

Array { etc }

Array { etc }

Array { etc }

Array { etc }

Advertisement

Answer

I fixed it by using this function and using my same .csv file as a multi-dimensional array. Before I couldn’t operate with it due to my output being a fake array, it was recognized as string if anything. With this I could easily operate on the sub-arrays through the standard array PHP functions shortly after.

<?php
function csv_to_multidimension_array($filename, $delimiter)
{
    if(!file_exists($filename) || !is_readable($filename)) {
        return false;
    }

    $header = NULL;
    $data = array();

    if (($handle = fopen($filename, 'r')) !== false) {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== false ) {
            $data[] = $row;
        }
        fclose($handle);
    }
    return $data;

}

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement