2014-06-12 2 views
1

나는 Codeigniter의 초보자이며 사용자가 웹 사이트 URL을 입력 할 수있는 양식을 만들었습니다. 사용자가 줄 바꿈으로 구분 된 텍스트 영역에 웹 사이트 URL을 삽입하거나 csv 파일에 website라는 헤더가 들어 있습니다.explode를 사용하여 PHP 연관 배열 만들기

Array ([0] => Array ([websites] => www.google.com) [1] => Array ([websites] => www.bing.com)) 

동안 내가 PHP에서 배열 기능을 폭발 변환하려고하면 배열과 같습니다 (텍스트 영역을 통해 사용자가 입력 한 웹 사이트가있는 경우) :

나는 CSV에서 데이터를 읽고이 같은 배열을 만들 라이브러리 CSVReader를 CodeIgniter를 사용하고 있습니다

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class CSVReader { 

var $fields;   /** columns names retrieved after parsing */ 
var $separator = ';'; /** separator used to explode each line */ 
var $enclosure = '"'; /** enclosure used to decorate each field */ 

var $max_row_size = 4096; /** maximum row size to be used for decoding */ 

/** 
* Parse a file containing CSV formatted data. 
* 
* @access public 
* @param string 
* @param boolean 
* @return array 
*/ 
function parse_file($p_Filepath, $p_NamedFields = true) { 
    $content = false; 
    $file = fopen($p_Filepath, 'r'); 
    if($p_NamedFields) { 
     $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); 
    } 
    while(($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { 
     if($row[0] != null) { // skip empty lines 
      if(!$content) { 
       $content = array(); 
      } 
      if($p_NamedFields) { 
       $items = array(); 

       // I prefer to fill the array with values of defined fields 
       foreach($this->fields as $id => $field) { 
        if(isset($row[$id])) { 
         $items[$field] = $row[$id];  
        } 
       } 
       $content[] = $items; 
      } else { 
       $content[] = $row; 
      } 
     } 
    } 
    fclose($file); 
    return $content; 
} 
} 

누군가가 나 같은 스타일의 배열을 만들 수 있도록 도와 주 시겠어요 : 내 CSVReader의

Array(www.google.com,www.bing.com) 

코드로 무엇입니까?

+0

"같은 스타일의 배열"이란 무엇입니까? 원하는 출력 배열의 예를 들려 줄 수 있습니까? 그것이 당신의 질문에 언급되었는지 확실하지 않습니다. – Dan

+0

사용자가 CSV 파일 업로드 또는 Textarea를 선택할 수있는 2 개의 입력 옵션이 있습니다. 제 질문은 입력과 배열 구조 모두에서 Array를 만들고 싶습니다. 동일해야합니다. 예 : Array ('website1', 'website2'); – user3172975

답변

1

큰 CSV 독자가 필요하다고 생각하지 않습니다. 또한 CSV는 표 형식의 데이터 (여러 열의 데이터가있는 경우)를 위해 더 많은 것을 의미합니다. 단순한 웹 사이트 목록을 작성하는 것만으로 훨씬 단순 해집니다. 나는 이것을 추천 할 것이다. 폼에서 데이터를 가져 오는 경우 당신이 취급 따옴표 또는 CSV 파일 업로드를 할 것으로 기대하지 않는

$websites = "foo,bar\nbaz,qux"; // Input 
$output = preg_split('#[\n\r\t,]+#', $websites); // Split by newlines, feeds, tabs, and commas 
foreach ($output as &$o) 
    $o = array('website' => trim($o)); 

// Or a shorter form for PHP 5+ 
foreach ($output as &$o) 
    $o = ['website' => trim($o)]; 

, 당신은 완전히 CSV 코드를 제거 할 수 있습니다. 이 경우, 배열을 연관 시키려면 루프 중 하나만 필요합니다.

// For PHP 4- 
foreach ($output as &$o) 
    $o = array( 'website' => $o[0], 'email' => $o[1], 'foo' => $o[2], 'bar'=>$o[3] ); 

// Or a shorter form for PHP 5+ 
foreach ($output as &$o) 
    $o = [ 'website' => $o[0], 'email' => $o[1], 'foo' => $o[2], 'bar'=>$o[3] ]; 

편집 : 데이터는 다음과 같은 루프를 사용하여 연관을 만들고 싶어 값의 다차원 배열 인 경우

는 (나는 그들이 당신이 원하는 무엇이든 될 수있는 열을 만든) 추가 첫 번째 샘플 코드에서 트리밍.

+0

귀중한 시간과 잘 설명 할 수있는 솔루션을 제공해 주신 Kver에게 감사드립니다. – user3172975

0

당신은 두 배열이 일치하고 싶지만, 당신은 배열에서 생을 마감 할 스타일을 지정하지 않은

당신이 CSV 배열을 변환하려면 다음을 수행하십시오.

foreach($csv_array as $website) { 
    $website_array[] = $website['websites']; 
} 

당신이 텍스트 영역의 배열을 변환하려면 다음을 수행하십시오

$count = 0; 
foreach($textarea_input as $website) { 
    $website_array[$count]['websites'] = $website; 
    $count++; 
} 

내가 첫 번째가 쉽게 관리 할 생각, 배열에 두 번째 레이어를 추가 할 이유가 아니라, 더 나은 여러 레이어가있는 배열에서 간단한 배열로 데이터를 추출합니다.

+0

시간 내 주셔서 감사합니다. – user3172975