代码之家  ›  专栏  ›  技术社区  ›  A. Meshu James Shuttler

从CSV/TXT文件看PHP中的关联数组

  •  0
  • A. Meshu James Shuttler  · 技术社区  · 6 年前

    $logins = array('user1' => '1234','user2' => '2345','user3' => '3456');
    

    一切正常。

    $file_handle = fopen("data.csv", "r");
    while (!feof($file_handle) ) {
      $line_of_text = fgetcsv($file_handle, 1024);
      if (empty($line_of_text)) { break; }
      $logins = array($line_of_text[0] . '=>' . $line_of_text[1]); /* remove the => and seperate the logins with "," on CSV */
    }
    

    有很多密切相关的问题和答案,所以在这里,但我确实读了,并试图植入他们没有成功。请引导我。

    data.csv 如下所示。

    user1,1234;
    user2,2345;
    user3,3456;
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   miken32    6 年前

    您可以避免这些循环、条件和 fopen() fclose() 混乱:

    <?php
    // read the file into an array
    $arr = file("data.csv", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    
    // split each line at the comma
    array_walk($arr, function(&$v, $k){$v=explode(",", $v);});
    
    // build an array from the data
    $keys = array_column($arr, 0);
    $values = array_column($arr, 1);
    $logins = array_combine($keys, $values);
    
        2
  •  1
  •   Chris Lear    6 年前

    $logins = array();
    $file_handle = fopen("data.csv", "r");
    while (!feof($file_handle) ) {
      $line_of_text = fgetcsv($file_handle, 1024);
      // At this point, $line_of_text is an array, which will look
      // something like this: {[0]=>'user1',[1]=>'1234'}
      if (empty($line_of_text)) { break; }
      $logins[$line_of_text[0]] = $line_of_text[1];
      // So the line above is equivalent to something like
      // $logins['user1'] = '1234';
    }
    

    这可能也会奏效,尽管我认为这不是你真正想进入的领域

    /* $dataFile = fopen("data.txt", "r"); */
    $dataFile = file_get_contents("data.txt");
    /* logins = array($dataFile); */
    eval('$logins = ' . $dataFile . ';');