Мне нужно переупорядочить многомерный массив 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);


    ?>

Любая помощь для этого?

Спасибо

-5
maxbre 24 Сен 2018 в 16:58

2 ответа

Лучший ответ

Если я правильно понял вашу логику, то эта функция - то, что вам нужно.

( Edited)

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
Matschek 25 Сен 2018 в 13:36

Да это оно...

Но теперь мне нужно обобщить это, пожалуйста, рассмотрите этот случай

$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));
0
maxbre 24 Сен 2018 в 14:56