Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php更改多维数组的排列/方向_Php_Arrays_Multidimensional Array - Fatal编程技术网

php更改多维数组的排列/方向

php更改多维数组的排列/方向,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,是否有一个内置的PHP函数可以实现以下效果?我不知道如何描述这个问题,但我觉得我以前在某个地方见过一个解决方案: 如何更改此选项: array( ['name'] => array( [0] => 'Pat', [1] => 'Sam', [2] => 'Chris' ), ['score'] => array ( [0] => '100', [1] =&g

是否有一个内置的PHP函数可以实现以下效果?我不知道如何描述这个问题,但我觉得我以前在某个地方见过一个解决方案:

如何更改此选项:

array(
    ['name'] => array(
        [0] => 'Pat',
        [1] => 'Sam',
        [2] => 'Chris'
    ),
    ['score'] => array (
        [0] => '100',
        [1] => '95',
        [2] => '109'
    ),

    ['color'] => array (
        [0] => 'blue',
        [1] => 'red',
        [3] => 'green'
    )
)
为此:

array(
    [0] => array(
        ['name'] => 'Pat',
        ['score'] => '100',
        ['color'] => 'blue'
    ),
    [1] => array(
        ['name'] => 'Sam',
        ['score'] => '95',
        ['color'] => 'red'
    ),
    [2] => array(
        ['name'] => 'Chris',
        ['score'] => '109',
        ['color'] => 'green'
    )
)

如果不是,递归函数是解决这个问题的正确方法吗?

我不知道有任何内置函数,但一些循环应该可以做到这一点

$ar = array(
    'name' => array(
        0 => 'Pat',
        1 => 'Sam',
        2 => 'Chris'
    ),
    'score' => array (
        0 => '100',
        1 => '95',
        2 => '109'
    ),

    'color' => array (
        0 => 'blue',
        1 => 'red',
        3 => 'green'
    ),
);
$new_ar = array();
foreach($ar as $key => $val) {
    foreach($val as $key2 => $val2) {
        $new_ar[$key2][$key] = $val2;
    }
}
print_r($new_ar);

试试这个,它会帮你的

Array
(
    [0] => Array
        (
            [name] => Pat
            [score] => 100
            [color] => blue
        )

    [1] => Array
        (
            [name] => Sam
            [score] => 95
            [color] => red
        )

    [2] => Array
        (
            [name] => Chris
            [score] => 109
            [color] => green
        )

)

您的第一个数组是一个二维数组,即一个矩阵,从数学角度来看,您想要的结果是转置矩阵,但保留了键,因此您可以在PHP中查找有关转置矩阵的一些答案。我还根据您的案例改编了上述问题的答案:


这被称为Sry-犯了一个小错误,现在已修复。
<?php

 $old = array(
        'name' => array('Pat', 'Sam','Chris'),
        'score' => array('100', '95','109'),
        'color' => array('blue', 'red','green'),
 );

 foreach($old as $key => $value){
     $i = 0;
    foreach($value as $sub_key => $sub_value){
        $new[$i][$key] = $sub_value;
        $i++;
    }   
 }
 print_r($new); 

?>
Array
(
    [0] => Array
        (
            [name] => Pat
            [score] => 100
            [color] => blue
        )

    [1] => Array
        (
            [name] => Sam
            [score] => 95
            [color] => red
        )

    [2] => Array
        (
            [name] => Chris
            [score] => 109
            [color] => green
        )

)
$arr = array(
    'name'  => array('Pat', 'Sam', 'Chris'),
    'score' => array ('100', '95', '109'),
    'color' => array ('blue', 'red', 'green')
);

$arr_keys = array_keys($arr);

array_unshift($arr, function(){
    return array_combine($GLOBALS['arr_keys'], func_get_args());
});

$result = call_user_func_array('array_map', $arr);

print_r($result);