数组操作/重构

时间:2016-03-01 17:12:25

标签: php arrays php-5.3 fgetcsv

我正在使用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,所以请耐心等待。

3 个答案:

答案 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的大小。