Reputation: 2510
I read a csv file and got this array $rows
Array
(
[0] => Array
(
[0] => Name
[1] => Company
[2] => Email
[3] => City
)
[1] => Array
(
[0] => Foo
[1] => Foo & co
[2] => [email protected]
[3] => NY
)
[2] => Array
(
[0] => Bar
[1] => Bar & co
[2] => [email protected]
[3] => Las Vegas
)
)
I would try to transform it into an associative array by filtering only some fields contained in the first array. The result should be this
Array
(
[0] => Array
(
['Name'] => Foo
['Company'] => Foo & co
['Email] => [email protected]
)
[1] => Array
(
['Name'] => Bar
['Company'] => Bar & co
['Email] => [email protected]
)
)
Unfortunately I tried it in various ways but without success.
$name = array_search('Name', $rows[0]);
$company = array_search('Company', $rows[0]);
$email = array_search('Email', $rows[0]);
$rows = unset($rows[0]);
$array = array();
foreach ( $rows as $r => $row ) {
foreach ( $row as $c => $cell ) {
if ($c == $name) { $array = array( 'name' => $cell ); }
if ($c == $company) { $array = array( 'company' => $cell ); }
if ($c == $email) { $array = array( 'email' => $cell ); }
}
}
Can you give me some suggestions? Thank you
Upvotes: 1
Views: 90
Reputation: 3006
You can try the below code. It will make header name and value of that dynamic, based on csv file.
$header = array();
foreach($array as $key=>$value){
if($key == 0){
$header = array_values($value);
}else{
$final_result[]= array_combine($header, array_values($value));
}
}
echo "<pre>";
print_r($final_result);
Upvotes: 2
Reputation: 94662
Try and build what you want when you read the file, rather than having to rearrange something you didnt want in the first place.
// loose the titles line
fgetcsv($file, 1000, ',')
$rows= [];
while ( $line = fgetcsv($file, 1000, ',') !== FALSE) {
$rows[] = ['Name'=> $line[0], 'Company'=> $line[1], 'Email'=> $line[2] ];
}
@patent pending @KIKO Software
Upvotes: 1