ForEach Loop Happens Twice   

Aug 29th, 2011 // In: Easy CSV Importer // By: Comments 1

This is a strange one an sorry in advance for the code, I don’t have a syntax plugin setup the current theme does not like them one bit.

I read a CSV files column titles. I dump them and there are 11. I then loop through them in a foreach, adding each title to an array.

I do this twice, well it was one loop but I split it during debugging. I dump the result and somehow 11 titles have been entered twice and sometimes 3 times. All within this code…

// use pear to get file configuration $conf = File_CSV::discoverFormat( $filepath ); $fields = File_CSV::read( $filepath, $conf );
 echo '<pre>'; var_dump($fields); echo '</pre>'; // save column titles foreach( $fields as $title ) { 
echo ' TITLE '; $csv['format']['titles'][] = $title; } foreach( $fields as $title ) { 
echo ' TITLE '; $csv['format']['titles_sql'][] = eci_cleansqlcolumnname($title); }
 echo '<pre>'; var_dump($csv['format']['titles_sql']); echo '</pre>';

Just to be clear, here is the first dump…

array(11) { [0]=> string(2) "ID" [1]=> string(10) "CHARACTERS" [2]=> string(5) "TITLE"
 [3]=> string(11) "DESCRIPTION" [4]=> string(5) "PRICE" [5]=> string(4) "LINK" [6]=> string(5) 
"IMAGE" [7]=> string(4) "DATE" [8]=> string(4) "CAT1" [9]=> string(4) "CAT2" [10]=> string(4) "CAT3" }

now here is the last dump to check what was actually added to my array…

array(33) { [0]=> string(2) "id" [1]=> string(10) "characters" [2]=> string(5) "title"
 [3]=> string(11) "description" [4]=> string(5) "price" [5]=> string(4) "link" [6]=> string(5) 
"image" [7]=> string(4) "date" [8]=> string(4) "cat1" [9]=> string(4) "cat2" [10]=> string(4) 
"cat3" [11]=> string(2) "id" [12]=> string(10) "characters" [13]=> string(5) "title" [14]=> string(11) 
"description" [15]=> string(5) "price" [16]=> string(4) "link" [17]=> string(5) "image" [18]=> string(4) 
"date" [19]=> string(4) "cat1" [20]=> string(4) "cat2" [21]=> string(4) "cat3" [22]=> string(2) 
"id" [23]=> string(10) "characters" [24]=> string(5) "title" [25]=> string(11) "description" 
[26]=> string(5) "price" [27]=> string(4) "link" [28]=> string(5) "image" [29]=> string(4)
 "date" [30]=> string(4) "cat1" [31]=> string(4) "cat2" [32]=> string(4) "cat3" }

You see there is 33 items, where the original array passed by PEAR CSV shows 11 items.

How does the foreach loop, manage too loop 3 times, sometimes twice. Even with the same file it will be 2 or 3 times. Very random that, nothing is changed.

I might have a fix that I’ve not tried and that is to do this, add an ID variable for the array key…

$id = 0; foreach( $fields as $title ) { echo ' TITLE '; $csv['format']['titles'][$id] = $title; ++$id; }

I just wanted to get this mentioned somewhere and see if anyone could enlighten me.

Thanks.

One Response so far.

  1. Ryan Bayne says:

    Adding an $id variable for the array key seems to have worked!

    Make a lot of Easy CSV Importer users happy. I still don’t understand why this happens.

    I suppose the lesson is, where possible, set the array key yourself.

Leave a Reply

You must be logged in to post a comment.