在PHP中操作2D数组

时间:2014-11-12 02:51:22

标签: php arrays

我在php中有一个2维数组,如下所示:

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帮助

4 个答案:

答案 0 :(得分: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 :(得分: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>';

答案 2 :(得分:0)

您需要遍历初始数组并以您想要的格式创建一个新数组。

$new_array = array();

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

答案 3 :(得分: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));