重新安排多维php数组

时间:2018-09-24 13:58:20

标签: php multidimensional-array

我需要重新排列php多维数组,以便“匹配”来自不同数组的相应值;

这是我的可复制示例

<?php 

    // my original array
    $myar= array(
                array('A'=>'xxx','B'=>1),
                array('A'=>'yyy','B'=>2),
                array('A'=>'xxx','B'=>3),
                array('A'=>'yyy','B'=>4)
                );

    print_r($myar);

   // my desired result, new array
    $myar_new= array(
                array('xxx'=>1,'yyy'=>2),
                array('xxx'=>3,'yyy'=>4)
                );

    print_r($myar_new);


    ?>

有什么帮助吗?

谢谢

2 个答案:

答案 0 :(得分:1)

如果我的逻辑正确,那么此功能就是您所需要的。

(已编辑)

function strange_reformat($srcArray) {
    $newArray = [];
    $c = count($srcArray);
    $i = 0;
    $groupStart = null;
    $collect = [];
    while($i < $c) {
        $row = current($srcArray[$i]);
        if ($row == $groupStart) {
            $newArray[] = $collect;
            $collect = [];
        }
        $tmp = array_values($srcArray[$i]);
        $collect[] = [$tmp[0] => $tmp[1]]; 
        if ($groupStart === null) $groupStart = $row;
        $i++;
    }
    $newArray[] = $collect;

    return $newArray;
}

print_r(strange_reformat($myar));

答案 1 :(得分:0)

是的,就是...

但是现在我需要概括一下,请考虑这种情况

$myar= array(
            array('A'=>'xxx','B'=>1),
            array('A'=>'yyy','B'=>2),
            array('A'=>'zzz','B'=>5),
            array('A'=>'xxx','B'=>3),
            array('A'=>'yyy','B'=>4),
            array('A'=>'zzz','B'=>6)
            );
function strange_reformat($srcArray) {
    $newArray = [];
    $c = count($srcArray);
    for ($i=0; $i<$c; $i+=3) {
        $first = array_values($srcArray[$i]);
        $second = array_values($srcArray[$i+1]);
        $third = array_values($srcArray[$i+2]);
        $newArray[] = [$first[0]=>$first[1], $second[0]=>$second[1], $third[0]=>$third[1]];
    }

    return $newArray;
}

print_r(strange_reformat($myar));