数组 manipulation/remodeling
Array manipulation/remodeling
我正在使用 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所以..请多多包涵
使用 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"
}
}
行里有这样的东西吗?
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 的大小。
查看此代码是否对您有帮助。数组可以有任意数量的元素
// 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);
输出
Array
(
[19] => Array
(
[CODE] => ABC
[DESCRIPTION] => RANDOM DESC
)
[56] => Array
(
[CODE] => DEF
[DESCRIPTION] => ANOTHER DESC
)
)
我正在使用 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所以..请多多包涵
使用 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"
}
}
行里有这样的东西吗?
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 的大小。
查看此代码是否对您有帮助。数组可以有任意数量的元素
// 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);
输出
Array
(
[19] => Array
(
[CODE] => ABC
[DESCRIPTION] => RANDOM DESC
)
[56] => Array
(
[CODE] => DEF
[DESCRIPTION] => ANOTHER DESC
)
)