2016-05-20 3 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 as $ key => $ value) { list ($ a, $ b) = explode ('-', $ key); $ new_array [$ a] [$ b] = $ value; } '? –

+0

вы можете сделать с помощью foreach loop или использовать функцию 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^