2016-02-04 2 views
0

У меня есть массив, который выглядит следующим образомPHP Объединить ключи от разных массивов

"name" => array:3 [ 
    1 => "Hello" 
    4 => "Test" 
    21 => "Test2" 
    ] 
"runkm" => array:3 [ 
    1 => "100.00" 
    4 => "1000.00" 
    21 => "2000.00" 
    ] 
"active" => array:3 [ 
    1 => "1" 
    4 => "0" 
    21 => "0" 
    ] 

Могу ли я каким-то образом объединить ключи сопоставления с функцией PHP, так что массив будет выглядеть следующим образом вместо

1 => array:3 [ 
    name => "Hello" 
    runkm => "100.00" 
    active => "1" 
    ] 
4 => array:3 [ 
    name => "Test" 
    runkm => "1000.00" 
    active => "0" 
    ] 
21 => array:3 [ 
    name => "Test2" 
    runkm => "2000.00" 
    active => "0" 
    ] 

EDIT: Спасибо всем за ответы. То, что я действительно искал, было встроенной функцией PHP для этого, о чем я, вероятно, следовало бы более четко рассказать.

+0

Если это произошло из формы, также можно группировать атрибут имени оттуда, больше не требуется преобразований, если нет, то для 'foreach' должно быть достаточно – Ghost

ответ

1
$newArr=array(); 
foreach($array1 as $key => $value){ 
    $newArr[$key]=>array(
       'name' =>$value[$key]; 
       'runkm' =>$array2[$key]; 
       'active'=>$array3[$key]; 
       ); 
} 

вот как вы делаете новый массив, а затем печатаете $ newArr и проверяете, получаете ли вы то, что хотите, или нет? Удачи!

0
<?php 

$resultarr = array(); 
for($i=0;$i<count($sourcearr['name']);$i++) { 
    $resultarr[] = array('name'=>$sourcearr['name'][$i], 'runkm'=>$sourcearr['runkm'][$i], 'active'=>$sourcearr['active'][$i]); 
} 
0

Это хорошо работает. А также не использует жестко закодированные ключи.

<?php 
    $arr = [ 
     "name" => [ 
      1 => "Hello", 
      4 => "Test", 
      21 => "Test2" 
     ], 
     "runkm" => [ 
      1 => "100.00", 
      4 => "1000.00", 
      21 => "2000.00" 
     ], 
     "active" => [ 
      1 => "1", 
      4 => "0", 
      21 => "0" 
     ] 
    ]; 

    // Pass the array to this function 
    function extractData($arr){ 
     $newarr = array(); 
     foreach ($arr as $key => $value) { 
      foreach($value as $k => $v) { 
       if(!isset($newarr[$k])) 
        $newarr[$k] = array(); 
       $newarr[$k][$key] = $v; 
      } 
     } 
     return $newarr; 
    } 

    print_r(extractData($arr)); 
?> 
0

Я не уверен, если есть функция, которая делает это в PHP, но, возможно, вы можете попробовать это

$arr1 = array(
    "name" => array(
     1 => "hello", 
     4 => "test", 
     21 => "test2", 
    ), 
    "runKm" => array(
     1 => "100", 
     4 => "200", 
     21 => "300", 
    ), 
    "active" => array(
     1 => "1", 
     4 => "0", 
     21 => "0", 
     ), 
    ); 

// declare another that will hold the new structure of the array 
$nArr = array(); 
foreach($arr1 as $key => $val) { 
    foreach($val as $sub_key => $sub_val) { 
     $nArr[$sub_key][$key] = $sub_val; 
    } 
} 

, что это делает просто цикл через каждый массив и его значение и присвоить его другой массив, который является $ nArr. Я надеюсь, что это помогает.

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