数组 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
    )

)