重新排列多维php数组

重新排列多维php数组,php,multidimensional-array,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),

我需要重新安排一个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);


    ?>
有什么帮助吗


谢谢

如果我正确理解了您的逻辑,那么这个函数就是您所需要的

编辑

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));
是的,就是这样

但是现在我需要概括一下,请考虑这个案例

$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));

这种分组背后的逻辑是什么?为什么1和2在一起,而1和4不在一起?您需要向我们展示您自己尝试了什么来解决此问题,还请包括您在执行此操作时遇到的任何错误。如果其中一项是数组“A”=>“zzz”,“B”=>1?我想选择键“B”中的所有值,对应于上述函数中键“A”中的相同值$I可以是任意数量的唯一大小写值,所以x/y/z可以是任意数量的值?重复两次或更多?新的数组值应在50%之后开始?或者重复模式中是否可能存在间隙?或者,分组是在第一行再次出现时开始的?您必须明确定义源数据是的,x/y/z可以是任意数量的值,并且它们至少重复两次;分组应该在模式的第一行再次出现时开始,感谢您的所有努力