重新排列PHP数组以组合单个实体的信息

时间:2015-10-22 11:41:58

标签: php arrays

我想以这种方式格式化动态表单数组。例如。我有:

[admins] => Array
        (
            [fName] => Array
                (
                    [0] => adminName1
                    [1] => adminName2
                )

            [fType] => Array
                (
                    [0] => adminType1
                    [1] => adminType2
                )

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

我想重新排列这个数组,以便所有与单个' admin'相关的信息结合起来。这样上面的数组就会转换为:

 [admins] => Array
            (
                [0] => Array
                    (
                        [fName] => adminName1
                        [fType] => adminType1
                        [isNull] => 0 
                    )

                [1] => Array
                    (
                        [fName] => adminName2
                        [fType] => adminType2
                        [isNull] => 1
                    )
            )

任何帮助,无论否定投票将不胜感激:)

3 个答案:

答案 0 :(得分:1)

无论密钥名称是什么,这个都适用于所有数组。 它由2个foreach循环组成,它只循环number_of_elements * number_of_properties次(在这种情况下:6次),这可能比调用array_map或其他类似函数更好。

// Your array (here, I'm using your example data)
$yourArray = array(
    'fName' => array('adminName1', 'adminName2'),
    'fType' => array('adminType1', 'adminType2'),
    'isNull' => array(0, 1)
);

$result = [];

foreach ($yourArray as $attribute => $values)
    foreach ($values as $key => $value)
        $result[$key][$attribute] = $value;

print_r($yourArray);
print_r($result);

答案 1 :(得分:0)

制作数组的副本,然后遍历索引,直到得到数组的最后一个索引:

$admins = $arr['admins'];
$arr['admins'] = array();

for ($i = 0; $i < count($admins['fName']); ++$i) {
    $arr['admins'][] = array(
        'fName' => $admins['fName'][$i],
        'fType' => $admins['fType'][$i],
        'isNull' => $admins['isNull'][$i]
    );
}

请注意,您必须确保输入的所有子数组都与$arr['admins']['fName']数组的长度相同。

答案 2 :(得分:0)

作为一个概念证明,我提出了这种效率低下的单线&#34; (如果你 不会计算args()函数。

function args() {
    return func_get_args();
}
$values = array_map(
    'array_combine',
    array_fill(
        0,
        count($a['admins'])-1,
        array_keys($a['admins'])
    ),
    call_user_func_array(
        'array_map',
        array_merge(array('args'),
        array_values($a['admins']))
    )
);