2011-06-24 24 views
1

私は誰も私は事前定義のPHP配列を再構築するのに役立つかもしれないかと思っていた。助けを必要とするPHPの配列を再構築

Array 
(
    [71-ctns] => 1 
    [71-units] => 1 
    [308-units] => 1 
    [305-ctns] => 1 
    [306-units] => 2 
) 

そして、私はそれがどのように見えるしたい:私の現在のアレイの出力がある

Array 
(
    [71] => Array 
     (
      [ctns] => 1 
      [units] => 1 
     ) 
    [308] => Array 
     (
      [units] => 1 
     ) 

    [305] => Array 
     (
      [ctns] => 1 
     ) 
    [306] => Array 
     (
      [units] => 2 
     ) 
) 

が、これは可能ですか?

申し訳ありませんが、代わりに、スプリットの爆発使用する必要があります。

答えて

2

これは

$merged = array(); 
foreach($a as $k=>$v){ 
    $t = explode('-',$k); 
    $id = intval($t[0]); 
    if(!array_key_exists($id, $merged)) 
     $merged[$id] = array(); 
    $merged[$id][$t[1]] = $v; 
} 

EDIT行う必要があります。

+0

感謝を再構築するためのコードの下に検索そんなにうまくいった! :) – SoulieBaby

1

はい、しかし、あなたがループする必要が(注:array_mapをも動作することができますが、この例では、より明確である):

$fin = array(); 
foreach($complex as $item => $val) 
{ 
    $pieces = explode('-', $item); 
    $fin[$pieces[0]] = isset($fin[$pieces[0]])?:array(); 
    $fin[$pieces[0]][$pieces[1]] = $val; 
} 
+0

$ fin [$ piece [1]] = $ val; ' – GWW

+0

@GWWあなたが正しいと思っています。コピー&ペーストエラー。 – cwallenpoole

1

事前に定義されたPHP配列

<?php 
$newArray=array(); 
$result = array("71-ctns"=>1,"71-units"=>1,"308-ctns"=>1,"308-units"=>1,"305-units"=>1,"306-units"=>2); 
if(is_array($result) && count($result)>0) { 
    foreach($result as $key=>$val) { 
     $getKeyArray = explode("-",$key); 
     $newArray[$getKeyArray[0]][$getKeyArray[1]] =$val;  
    } 
} 
print"<pre>"; 
print_r($newArray); 
?> 
関連する問題