2013-08-08 6 views
0

비슷한 질문이 반복됩니다.CSV 문자열을 PHP의 연관 배열로 변환하는 방법

다른 문제에 대해 데이터베이스에서 문자열을 업데이트하고 가져 오는 중입니다.

$str = "1|1,2|1,3|2,5|6"; 

또는

$str = "1=1,2=1,3=2,5=6"; 

이 어떻게 사람을 변환 할 수 있습니다

$str = "1:1,2:1,3:2,5:6"; 

또는

아래의 하나처럼 보이는 내 변수 $str의 데이터베이스 하나에서 값을 가져 오는 후에 말할 수 또는 PHP의 연관 배열에 거의 다른 문자열

미리 감사드립니다. 나는 대답을 시도했지만 비슷한 것을 찾지 못했습니다.

코드 나는이 시도 그것을 연관 배열

$firstArr = explode(',', $str); 

foreach (firstArr as $value) { 
    $secondArr = explode(':', $value); 
} 
+3

힌트 : http://php.net/manual/en/function.explode.php –

+0

지금까지 어떤 시도를 했습니까? – Pascamel

+0

연관 배열을 어떻게 보이게할까요? – Maximus2012

답변

1

을 만들려고 :

$final_array = Array(); 
$str = "1|1,2|1,3|2,5|6"; 
$arr1 = explode(",", $str); 

// this gives $arr1 as 
// array(4) { [0]=> string(3) "1|1" [1]=> string(3) "2|1" [2]=> string(3) "3|2" [3]=> string(3) "5|6" } 
// iterate through $arr1 and further split it on | using explode function 
foreach ($arr1 as $k=>$v){ 
    $arr2 = explode("|", $v); 
    // $arr2 would be like 
    // array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } etc. 
    $final_array[$arr2[0]] = $arr2[1]; 
} 

print_r($final_array); 
// gives Array ([1] => 1 [2] => 1 [3] => 2 [5] => 6) 

을하지만, 실뱅 언급 한 바와 같이, 당신은 또한 당신의 데이터베이스 정규화 부분으로 볼 수도 있습니다.

+0

지금 시도해보십시오.데이터베이스 정규화 –

+0

을 읽고 있었는데이 하나가 완벽하게 작동합니다. 고맙습니다. –

+0

당신을 진심으로 환영합니다. – Maximus2012

0

사용하여 PHP의 str_splitexplode 기능 : 모든 쉼표 후

$str = "1:1,2:1,3:2,5:6"; 
$split = str_split($str, 4); 
$explode = explode(":", $split); 
$array = array(); 
for($i = 0; $i <= count($explode); $i++) 
{ 
    $array[] = ($explode[$i]); 
} 

(4 자), 문자열 분할. 다음마다 : 값을 폭발 시키십시오. 그리고 그것을 배열에 넣으십시오.

0
/** 
* Converts CSV to associative array 
* 
* @param string $str 
* 
*/ 
function csv2associative_array($str) { 
    $csv_items = preg_split('/\s*\,\s*/',$str); 
    $items = array(); 
    foreach ($csv_items as $x => $csv_item) { 
     list($key,$value) = preg_split('/\W/',$csv_item,2); 
     if ($key && $value) { 
     $items[$key] = $value; 
     } 
     else { 
     trigger_error("keys/values not found for item #$x"); 
     } 
    } 
    return $items; 
} 
0

A) 당신은 처음에 데이터베이스에 같은 문자열을 저장 할 수 없습니다. 코드 냄새입니다. 무엇보다도 그것은 당신이 당신의 스키마를 충분히 정규화하고 있지 않다는 것을 암시한다.

B) 실제로 이러한 문자열로 작업해야하는 경우를 예로들 수 있습니다.

$string = "1|1,2|1,3|2,5|6"; 
$tempArray = explode(",", $string); 
$finalArray = array(); 

foreach ($tempArray as $pair) { 
    $subArray = explode("|", $pair); 
    $finalArray[$subArray[0]] = $subArray[1]; 
} 

배열 될 것이다 ([1] => 1 [2] => 1 [3] => 2 [5] => 6)

너라면 print_r.

또는 substring 등의 다른 문자열 함수를 사용하여 $ 쌍 중에서 키와 값을 가져올 수 있습니다.

관련 문제