2011-07-12 10 views
0

私はこの問題を一日中悩ましています。この形式で配列にアレイをより小さな配列に変換する

Array 
(
[0] => Array 
    (
     [compId] => 3081 
     [category] => Products 
     [rev] => 0.61 
    ) 

[1] => Array 
    (
     [compId] => 3080 
     [category] => Plants 
     [rev] => 51 
    ) 

[2] => Array 
    (
     [compId] => 3080 
     [category] => Products 
     [rev] => 6.1 
    ) 
) 

: は、どのように私は次の配列を変換することができ

Array( 
'compId'=>array("3081","3080"), 
'Products'=>array('0.61', '6.1'), 
'Plants'=>array('0', '51') 
); 

前者は関数によって返されています。後者の配列の0は前の配列には存在しないことに注意してください。私はしかし、キー値を保持する必要があります。私はそれを動作させるためにいくつかの配列関数を試してきましたが、私はちょうど問題を解決することはできません。 ご協力いただければ幸いです。

ちょっと凝ってみてください。後者の配列は、テーブルを作成するための入力として使用されます。私は望ましい結果理解していれば

 
CompID | Products | Plants 
__________________________ 
3081 | 0.61  | 0 
__________________________ 
3080 | 6.1  | 51 
+0

おそらくループのカップル... – Treffynnon

+1

多分、前者から後者への論理を説明することができますか?それはあまり明らかではありません。 – deceze

答えて

1

::これは私は望ましい結果を理解する方法です

$result = array(); 

foreach ($array as $item) { 
    $result['compId'][] = $item['compId']; 
    $result[$item['category']][] = $item['rev']; 
} 

print_r($result); 
+0

ありがとう、私が探していたものだけではなく、あなたは正しい方向を見ています。私はまだ何らかの形で二重値(compId 3080など)を省略し、シフトキーから値を保持するために "0"を追加する必要があります。 –

0

を、質問は、配列から一つのアイテムをドロップするので、私 の表は、と何かのようになります。まったくわかりません。そして、それはので、おそらく後にいくつかの重要なエイリアシングを必要とし、キーを変更します。

foreach ($array as $item) 
    foreach($item as $key => $value) 
     $result[$key][] = $value 
; 
0
$categories = array_unique(array_map(function ($elem) { return $elem['category']; }, $array)); 
$tableRows = array('compId' => array_values(array_unique(array_map(function ($elem) { return $elem['compId']; }, $array)))); 

foreach ($tableRows['compId'] as $i => $compId) { 
    foreach ($categories as $category) { 
     $tableRows[$category][$i] = 0; 
     foreach ($array as $elem) { 
      if ($elem['category'] == $category && $elem['compId'] == $compId) { 
       $tableRows[$category][$i] = $elem['rev']; 
       break; 
      } 
     } 
    } 
} 

私はかなり確信しているこれはなく、少なくとも異なるアレイフォーマットを標的とすることにより、さらに最適化することができるが、これは動作するはずです。

関連する問題