Par*_*roX 37 php csv arrays associative
我已经看过很多关于如何获取CSV文件然后创建一个以标题为关键字的关联数组的例子.
例如:
Brand,Model,Part,Test
Honda,Civic,123,244
Honda,Civic,135,434
Toyota,Supra,511,664
Run Code Online (Sandbox Code Playgroud)
它会创建一个Array,如 Array[$num][$key]这里$key将是品牌,型号,部件,测试.
因此,如果我想访问测试值"434",我将不得不循环数组中的每个索引,然后忽略任何不是本田的品牌,以及任何不是思域的模型
我需要做的是最直接地访问值,而不是通过每个$ num索引的for循环运行.我希望能够访问价值测试"434":
Array['Honda']['Civic']['135']
或控制一个for语句循环通过每个模型本田有......类似的东西
foreach $model in Array['Honda']
至少我需要能够通过给定已知品牌的每个模型并访问每个模型的所有相关信息.
编辑:
只是为了确认我正在设置这个例子.我的实际数据有以下标题:
brand model part price shipping description footnote
其中我需要访问与该部件相关的所有信息(价格,运输,desc,脚注)
Dae*_*rik 62
太长的解决方案.我总觉得这是最简单的:
<?php
/* Map Rows and Loop Through Them */
$rows = array_map('str_getcsv', file('file.csv'));
$header = array_shift($rows);
$csv = array();
foreach($rows as $row) {
$csv[] = array_combine($header, $row);
}
?>
Run Code Online (Sandbox Code Playgroud)
Hai*_*vgi 59
逐行遍历csv文件,并插入到数组中:
$array = $fields = array(); $i = 0;
$handle = @fopen("file.csv", "r");
if ($handle) {
while (($row = fgetcsv($handle, 4096)) !== false) {
if (empty($fields)) {
$fields = $row;
continue;
}
foreach ($row as $k=>$value) {
$array[$i][$fields[$k]] = $value;
}
$i++;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)
mar*_*rio 18
要创建关联列表数组,请使用以下内容:
$keys = fgetcsv($f);
while (!feof($f)) {
$array[] = array_combine($keys, fgetcsv($f));
}
Run Code Online (Sandbox Code Playgroud)
并通过特定属性遍历和过滤,编写如下函数:
function find($find) {
foreach ($array as $row) {
if (array_intersect_assoc($row, $find) == $find) {
$result[] = $row;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里调用它$find = array(Brand=>Honda, Model=>Civic, Part=>135)来过滤掉搜索到的模型.除非您只想访问"Test"属性,否则其他位置数组结构似乎不太可行.
尝试这个简单的算法:
$assocData = array();
if( ($handle = fopen( $importedCSVFile, "r")) !== FALSE) {
$rowCounter = 0;
while (($rowData = fgetcsv($handle, 0, ",")) !== FALSE) {
if( 0 === $rowCounter) {
$headerRecord = $rowData;
} else {
foreach( $rowData as $key => $value) {
$assocData[ $rowCounter - 1][ $headerRecord[ $key] ] = $value;
}
}
$rowCounter++;
}
fclose($handle);
}
var_dump( $assocData);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54414 次 |
| 最近记录: |