2012-05-10 2 views
1

나는 분리하고 다차원 배열을 만들려는 문자열이 있습니다. 문자열은 다음과 같습니다이 문자열에서 다차원 PHP 배열을 만드는 방법은 무엇입니까?

$string = "item-size:large,color:blue,material:cotton,item-size:medium,color:red,material:silk,"; 

불행하게도, 내가 문자열이 내가이 배열을 만들려고 이유입니다 함께 넣어하는 방법을 제어 할 수 없습니다. 여기에, 그래서

$item[1]['color'] // = blue 
$item[2]['material'] // = silk 

내가 무슨 짓을했는지의 :

내 목표는 다음과 같이 배열을 만드는 것입니다

$item = array(); 

$i=0; // I know this is messy 
$eachitem = explode("item-",$string); 
array_shift($eachitem); // get rid of the first empty item 

foreach ($eachitem as $values) { 

    $i++; // Again, very messy 
    $eachvalue = explode(",",$values); 
    array_pop($eachvalue); // get rid of the last comma before each new item 

    foreach ($eachvalue as $key => $value) { 

     $item[$i][$key] = $value; 

    } 

} 

나는 분명히이 ... 어떤 제안을 잃었어요?

+0

항상 문자열의 형식입니까? 변경 될 수있는 부분은 무엇입니까? –

답변

0

대부분 당신이 있습니다. 그냥 (가/축소를 성장 경우이 미래에 조정을 허용합니다) 항목의 수는 $ num_attr 문자열 속성을 설정

foreach ($eachvalue as $value) { 
    $properties = explode(':', $value); 
    $item[$i][$properties[0]] = $properties[1]; 

} 
0

당신이 가까이있어, 이것은 내가 어떻게 할 것입니다 :

$string = "item-size:large,color:blue,material:cotton,item-size:medium,color:red,material:silk,"; 
$substr = explode("item-", $string); 
$items = array(); 
foreach ($substr as $string) { 
    $subitems = array(); 
    $pairs = explode(",", $string); 
    foreach ($pairs as $pair) { 
     list($key, $value) = explode(":", $pair, 2); 
     $subitems[$key] = $value; 
    } 
    $items[] = $subitems; 
} 
var_dump($items); 

여기 list를 사용하는 경우 다른 사람이 데이터가 손실 될 수 있습니다 당신은 explode에 추가 카운트 제한을 필요가 있습니다 마십시오 큰 :)이있다 더 :입니다.

0
$array = array(); 
$string = explode(',', $string); 
foreach($string as $part): 
    $part = trim($part); 
    if(strlen($part) < 3) continue; 
    $part = explode(':', $part); 
    $array[$part[0]] = $part[1]; 
endforeach; 
0
$string = "item-size:large,color:blue,material:cotton,item-size:medium,color:red,material:silk,"; 
$num_attr = 3; 

$item = array(); 
$i=$x=0; 
foreach(explode(',', trim($string,',')) as $attr) 
{ 
    list($key, $value) = explode(':', $attr); 
    $item[$x+=($i%$num_attr==0?1:0)][$key] = $value; 
    $i++; 
} 

과 내면의 foreach를 교체하십시오. foreach 내부의 트림은 마지막 쉼표와 같은 "빈"데이터를 제거합니다 (하나가 나타나면 빈 쉼표도 제거합니다). 미친 $ item [$ x + = ($ i % $ num_attr == 0? 1 : 0)]은 counter/modulus의 수를 취합니다.이 속성은 0 일 때 새로운 제품 라인에 있음을 의미합니다. 우리는 항목 번호 인덱스를 채우는 x에 1을 더합니다. 계수가 숫자를 반환하면 동일한 제품에 있다는 것을 알기 때문에 항목 색인을 변경하지 않으므로 0이 추가되어 같은 항목에 속성이 추가됩니다.

관련 문제