2011-11-17 2 views
0

I의 (a 예)와 1 차원 배열이 있습니다문자열의 접두어를 기반으로 하위 배열을 만드는 방법은 무엇입니까?

{ 
    ["Pagamento_valor_liquido"]=> string(3) "111" 
    ["Pagamento_valor_bruto"]=> string(3) "222" 
    ["TipoPagamento_id"]=> string(3) "333" 
    ["TipoPagamento_descricao"]=> string(3) "444" 
} 

을하고 난 두 개의 하위 배열이를 transforme하는 데 도움이 필요합니다 :이있는 일반적인 방법으로 그것을 할 방법

{ 
    ["Pagamento"]=> array(2) { 
     ["valor_liquido"]=> string(3) "111" 
     ["valor_bruto"]=> string(3) "222" 
    } 
    ["TipoPagamento"]=> array(2) { 
     ["id"]=> string(3) "333" 
     ["valor_bruto"]=> string(3) "444" 
    } 
} 

을 패턴 (Father_son_name)?

감사합니다, 셀소

+1

당신이 뭘 하려는지 알기가 어렵습니다. –

답변

1
$array = array("Pagamento_valor_liquido" => "111", "Pagamento_valor_bruto" => "222", "TipoPagamento_id" => "333", "TipoPagamento_descricao" => "444"); 

$result = array(); 
foreach ($array as $k => $v) { 
    $name = explode('_', $k); 
    $newkey = array_shift($name); 
    $newname = implode('_', $name); 
    $result[$newkey][$newname] = $v; 
} 
var_export($result); 

here

이 목적을 위해 매우 일반적인 것 같다 행동을보세요.

+0

우수하지만 배열 ('111', '222', '333', '444')의 값은 어디에 있습니까? – celsowm

+0

'$ result [$ newkey]'가 존재하지 않을 때 값을 가지지 않고 첫 번째 패스에서 경고를 생성합니다. – six8

+1

워! 미안 해요, $ $ [$ newkey] [$ newvalue]'에 대한 할당에서'$ k'와'$ v'를 혼동했습니다. FTFY. – Nemoden

2
function transform($array) { 
    $return = Array(); 
    foreach($array as $keyname => $value) { 
     list($key, $key2) = explode("_", $keyname, 2); 
     if(!isset($return[$key])) $return[$key] = Array(); 
     $return[$key][$key2] = $value; 
    } 
    return $return; 
} 
+0

'$ rvalue'는'$ value'이어야합니다 – six8

+0

물론 고맙습니다. 답변 됨 업데이트 됨 :) – Peter

관련 문제