2016-07-27 126 views
1

我目前正在尝试使用PHP从csv文件中获取一些信息。我正在使用以下代码并获取以下输出:数组变量键/值PHP

function readCSV($csvFile){ 
    $file_handle = fopen($csvFile, 'r'); 
    while (!feof($file_handle)) { 
     $line_of_text[] = fgetcsv($file_handle, 1024); 
    } 
    fclose($file_handle); 
    return $line_of_text; 
} 

$csvFile = '500.csv'; 
$csv = readCSV($csvFile); 
$keys = $csv[0]; 
$step = $csv[1]; 
foreach ($step as $k=>$v) 
{ 
    $a = array("$keys[$k]"); 
    $b = array("$v"); 
    $c = array_combine($a, $b); 
    echo '<pre>'; 
    print_r($c); 
    echo '</pre>'; 
} 

我在单个数组中获得输出,如:

Array 
(
    [first_name] => bob 
) 
Array 
(
    [last_name] => smith 
) 
Array 
(
    [company_name] => bobs logs 
) 

我想输出在一个单一的数组中,显示如;

Array 
(
    [first_name] => bob 
    [last_name] => smith 
    [company_name] => bobs logs 
) 

如果有人能指出我要出错的地方,它将被appriciated!

+0

既然你有3个数组,你可以只是做https://repl.it/Cg3C'$ A + $ B + $ C' –

回答

3

array_combine功能

返回组合阵列FALSE如果每个阵列的元素数量不相等。

您的代码在每次循环迭代中创建一个新数组。
要得到一个数组改变你的循环代码如下所示:

... 
$c = []; 
foreach ($step as $k => $v) 
{ 
    $c[$keys[$k]] = $v;  
} 
echo '<pre>'; 
print_r($c); 
echo '</pre>'; 
+0

这个工作!感谢 – mrdarb

2

变化:

$a = array("$keys[$k]"); 
$b = array("$v"); 
$c = array_combine($a, $b); 

要:

$c[$keys[$k]] = $v; 

,循环之后:

echo '<pre>'; 
print_r($c); 
echo '</pre>'; 
1
<?php 
function readCSV($csvFile) 
{ 
    $file_handle = fopen($csvFile, 'r'); 
    while (!feof($file_handle)) { 
     $line_of_text[] = fgetcsv($file_handle, 1024); 
    } 
    fclose($file_handle); 
    return $line_of_text; 
} 

$csvFile = '500.csv'; 
$csv  = readCSV($csvFile); 
$keys = $csv[0]; 
$step = $csv[1]; 
$output = array(); 
foreach ($step as $k => $v) { 
    $a = array("$keys[$k]"); 
    $b = array("$v"); 
    $c = array_combine($a, $b); 
    $output = array_merge($output, $c); 
} 
echo '<pre>'; 
print_r($output); 
echo '</pre>'; 

我都做什么样的变化? 我把外面的foreach的回声和print_r的,并添加

$output = array_merge($output, $c); 

然后最后我们打印$输出数组时,哪个合并每一个新的数组作为一个新的因素我们$输出数组中。

这应该是工作,只要你想,无论如何,如果你需要改变一些东西,将来你可以检查array_merge功能here

+0

你应该解释一下你的答案。 –

+0

完成,感谢您的反馈。 – Martin