我正在使用fgetcsv
从csv读取数据,输出如下:
Array(
[0] => Array
(
[0] => NUMBER
[1] => CODE
[2] => DESCRIPTION
)
[1] => Array
(
[0] => 19
[1] => ABC
[2] => RANDOM DESC
)
[2] => Array
(
[0] => 56
[1] => DEF
[2] => ANOTHER DESC
)
)
但是因为我会根据数字进行一些搜索,我认为记忆明智,我需要一个像这样的数组:
Array(
[19] => Array
(
[CODE] = ABC
[DESCRIPTION] = RANDOM DESC
)
[56] => Array
(
[CODE] = DEF
[DESCRIPTION] = ANOTHER DESC
)
)
这是最好的方法还是可能有更好的方法?另外......有这样的功能吗?我不是很喜欢PHP,所以请耐心等待。
答案 0 :(得分:2)
使用array_reduce
可以让您轻松
$result = array_reduce(array_slice($data, 1), function($ys, $x) {
list($number, $code, $description) = $x;
$ys[intval($number)] = array('CODE' => $code, 'DESCRIPTION' => $description);
return $ys;
}, array());
var_dump($result);
输出
array(2) {
[19]=>
array(2) {
["CODE"]=>
string(3) "ABC"
["DESCRIPTION"]=>
string(11) "RANDOM DESC"
}
[56]=>
array(2) {
["CODE"]=>
string(3) "DEF"
["DESCRIPTION"]=>
string(12) "ANOTHER DESC"
}
}
答案 1 :(得分:1)
看看这段代码是否对您有所帮助。数组可以包含任意数量的元素
// removes the header ( first element in the array)
$header = array_shift($data_array);
// iterate the array
foreach($data_array as $key=>$value){
// check if array
if(is_array($value)){
$search_number = $value[0];
foreach($value as $k=>$v){
if($k>0){
$new_data_array[$search_number][$header[$k]]=$v;
}
}
}
}
print_r($new_data_array);
Out Put
Array
(
[19] => Array
(
[CODE] => ABC
[DESCRIPTION] => RANDOM DESC
)
[56] => Array
(
[CODE] => DEF
[DESCRIPTION] => ANOTHER DESC
)
)
答案 2 :(得分:0)
像这样的东西?
foreach($firstarray as $value){
$newarray[$value[0]] = ['code' => $value[1], 'desc' => $value[2]];
}
print_r($newarray);
但请注意,此代码会覆盖现有ID,但您可以查看:if(!isset($newarray[$value[0]])){}
但我必须诚实。我没有看到使用该ID作为主索引ID的性能优势。排序的数组应循环更快。这当然在很大程度上取决于你的csv的大小。