2016-05-20 4 views
2

キーを爆発させた後、単純な配列から多次元配列を取得しようとしています。 私の配列は、名前がmd5ハッシュと入力の実際の名前から動的に作られる複数の入力の結果です。 md5文字列をキーとして使用し、相対値をグループ化する必要があります。配列を分解したキーストリングでグループ化する

$old_array = [ 
    'ec0e2603172c73a8b644bb9456c1ff6e-name' => 'Bruce', 
    'ec0e2603172c73a8b644bb9456c1ff6e-surname' => 'Wayne', 
    'ec0e2603172c73a8b644bb9456c1ff6e-city' => 'Gotham', 

    '84d961568a65073a3bcf0eb216b2a576-name' => 'Clark', 
    '84d961568a65073a3bcf0eb216b2a576-surname' => 'Kent', 
    '84d961568a65073a3bcf0eb216b2a576-city' => 'Metropolis', 
    //etc 
]; 

これは私が取得したいものです。

$new_array = [ 
    'ec0e2603172c73a8b644bb9456c1ff6e' => [ 
      'name' => 'Bruce', 
      'surname' => 'Wayne', 
      'city' => 'Gotham' 
    ], 
    '84d961568a65073a3bcf0eb216b2a576' => [ 
      'name' => 'Clark', 
      'surname' => 'Kent', 
      'city' => 'Metropolis' 
    ] 
]; 
+1

の下に使用してください '$ new_array = []; foreach($ old_arrayを$ key => $ value){ list($ a、$ b)= explode( ' - '、$ key); $ new_array [$ a] [$ b] = $ value; } '? –

+0

foreachループやarray_map/array_walk関数を使用して目的の出力を得ることができます –

答えて

3

Working demo

ちょうどあなたの配列のキーは、その配列キーのパーティション値を使用して新しい配列に-と店舗で展開します。

$array = [ 
    'ec0e2603172c73a8b644bb9456c1ff6e-name' => 'Bruce', 
    'ec0e2603172c73a8b644bb9456c1ff6e-surname' => 'Wayne', 
    'ec0e2603172c73a8b644bb9456c1ff6e-city' => 'Gotham', 

    '84d961568a65073a3bcf0eb216b2a576-name' => 'Clark', 
    '84d961568a65073a3bcf0eb216b2a576-surname' => 'Kent', 
    '84d961568a65073a3bcf0eb216b2a576-city' => 'Metropolis', 
    //etc 
]; 

$out = array(); 
foreach($array as $key => $val){ 
    $tmp = explode("-", $key); 
    $out[$tmp[0]][$tmp[1]] = $val; 
} 

echo '<pre>'; 
print_r($out); 
0

このコードの出力と同じ:

<?php 

$old_array = [ 
    'ec0e2603172c73a8b644bb9456c1ff6e-name' => 'Bruce', 
    'ec0e2603172c73a8b644bb9456c1ff6e-surname' => 'Wayne', 
    'ec0e2603172c73a8b644bb9456c1ff6e-city' => 'Gotham', 

    '84d961568a65073a3bcf0eb216b2a576-name' => 'Clark', 
    '84d961568a65073a3bcf0eb216b2a576-surname' => 'Kent', 
    '84d961568a65073a3bcf0eb216b2a576-city' => 'Metropolis', 
    //etc 
]; 

$new_array = []; 

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

    $ky = explode('-',$key); 
    $new_array[$ky[0]][] = $ky[1]; 
    $new_array[$ky[0]][] = $value; 

} 

print_r($new_array); 
0

などの基本として、何かの難しさだコード

print "<pre>"; 
$reverse = array(); 
array_walk($old_array, 'walk'); 
$reverse = walk($reverse); 

function walk($val, $key = 0) 
{ 
    static $new_array; 
    if (!$new_array) 
    { 
     $new_array = array(); 
    } 
    $nums = explode('-', $key); 
    if ($nums[0]) 
    { 
     $new_array[$nums[0]][$nums[1]] = $val; 
    } 
    return $new_array; 
} 
print_r($reverse); 
関連する問題