2016-07-27 4 views
1

В настоящее время я пытаюсь использовать PHP для получения некоторой информации из файла csv. Я использую следующий код и получаю следующий вывод;Array variable key/value 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 '$ а + $ 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); 

To:

$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