переставить многомерный массив PHP - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно переставить многомерный массив 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 голосов
/ 24 сентября 2018

да, вот и все ...

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

$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 голосов
/ 24 сентября 2018

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

(отредактировано)

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...