2014-11-12 3 views
-2

У меня есть 2 мерного массива в PHP следующим образом:манипулировать 2D массив в PHP

Array 
(
    [0] => Array 
     (
      [0] => 10 
      [1] => 
     ) 

    [1] => Array 
     (
      [0] => 67 
      [1] => 
     ) 

    [2] => Array 
     (
      [0] => 67 
      [1] => 50 
     ) 

) 

Я хочу, чтобы манипулировать следующим образом:

Array 
(
    [0] => Array 
     (
      [0] => 10 
      [1] => 67 
      [2] => 67 
     ) 

    [1] => Array 
     (
      [0] => 
      [1] => 
      [2] => 50 
     ) 

) 

означает, что я хочу взять первые элементы все внутренние массивы в одном массиве и второй элемент в другом массиве.

Как я могу манипулировать этим. Plz помочь

+2

Попробуйте простой старый 'for' или' foreach' первым, а затем показать нам свою лучшую попытку. – zerkms

+1

где ваш код PHP? – Raptor

+0

Я не понимаю, почему я спрашивал ... –

ответ

0

Вот общее решение, которое работает независимо от того, сколько элементов у вас есть в массиве и суб-массивы:

// Set up an array for testing 
$my_array = array(array(10, null), array(67, null), array(67, 50)); 

/** 
* Our magic function; takes an array and produces a consolidated array like you requested 
* @param array $data The unprocessed data 
* @return array 
*/ 
function consolidate_sub_arrays($data) 
{ 
    /** 
    * The return array 
    * @var array $return_array 
    */ 
    $return_array = array(); 
    // Loop over the existing array 
    foreach ($data as $outer) { 
     // Loop over the inner arrays (sub-arrays) 
     foreach($outer as $key => $val) { 
      // Set up a new sub-array in the return array, if it doesn't exist 
      if (!array_key_exists($key, $return_array)) { 
       $return_array[$key] = array(); 
      } 
      // Add the value to the appropriate sub-array of the return array 
      $return_array[$key][] = $val; 
     } 
    } 
    // Done! 
    return $return_array; 
} 

// Just to verify it works; delete this in production 
print_r(consolidate_sub_arrays($my_array)); 
1

Просто запустите следующий сценарий:

$array1 = array(); 

for ($i = 0; $i < count($array1); $i++) { 
    for ($j = 0; $j < count($array1[$i]); $j++) { 
     $array2[$j][$i] = $array1[$i][$j]; 
    } 
} 
+1

Разве это не точки с запятой, а не запятые? – vpzomtrrfrt

+0

Это действительно неэффективно. –

+0

@vpzomtrrfrt Исправлено –

0

Вам нужно перебрать исходный массив и создать новый массив в формате, который вы хотите.

$new_array = array(); 

foreach ($input_array as $in) { 
    $new_array[0][] = $in[0]; 
    $new_array[1][] = $in[1]; 
} 
print_r($new_array); 
1

Вы можете array_map() вместо петли. Пример:

$newArr[] = array_map(function($v){return $v[0];},$arr); 
$newArr[] = array_map(function($v){return $v[1];},$arr); 

Или можно использовать array_column() если ваш PHP 5.5+

$newArr[] = array_column($arr, 0); 
$newArr[] = array_column($arr, 1); 

print '<pre>'; 
print_r($newArr); 
print '</pre>'; 
Смежные вопросы