Łączenie tablic z uwzględnieniem numerów ID

0

Witam serdecznie,
Mam 3 tablice w PHP:

  <pre>Array
(
    [0] => Array
        (
            [0] => 1
            [1] => login
            [2] => 1.4
        )

    [1] => Array
        (
            [0] => 2
            [1] => login2
            [2] => 1.2
        )

    [2] => Array
        (
            [0] => 3
            [1] => trif
            [2] => 30.2
        )

    [3] => Array
        (
            [0] => 4
            [1] => wojtek
            [2] => 1
        )

)
</pre><pre>Array
(
    [0] => Array
        (
            [0] => 3
            [1] => trif
            [2] => 134
        )

    [1] => Array
        (
            [0] => 1
            [1] => login
            [2] => 0
        )

    [2] => Array
        (
            [0] => 2
            [1] => login2
            [2] => 0
        )

    [3] => Array
        (
            [0] => 4
            [1] => wojtek
            [2] => 0
        )

)
</pre><pre>Array
(
    [0] => Array
        (
            [0] => 3
            [1] => trif
            [2] => 3
        )

    [1] => Array
        (
            [0] => 1
            [1] => login
            [2] => 2
        )

    [2] => Array
        (
            [0] => 2
            [1] => login2
            [2] => 1
        )

    [3] => Array
        (
            [0] => 4
            [1] => wojtek
            [2] => 0
        )

)

chciałbym je połączyć w jedną - na podstawie pierwszego elementu tablicy (ID)

w jaki sposób mógłbym połączyć te 3 tablice z uwzględnieniem tego ID?
utrudnieniem może być to że nie zawsze te tablice są posortowane i czasami mają puste "komórki"....

Bardzo proszę o pomoc,
Northwest

0

Chodzi Ci o to, żeby połączyć te tablicę żeby to ID... Niee Nie wiem o co Ci chodzi :(

0

chce połączyć 3 tablice w 1. "Łącznikiem" tych tablic jest pierwsza "kolumna" (te numerki ID):)

chce przykładowo:
(
[0] => 1
[1] => login
[2] => 1.4
[3] => 134
[4] => 2
)

takie coś uzyskać.... Nie wiem czy dobrze to opisałem??

0

nie rozumiem, nie pasuje mi to login do 134 (tam jest trif)

0

Tak, powinno być tak:
[0] => 2
[1] => login2
[2] => 1.2
[3] => 0
[4] => 2

[0] => 1
[1] => login
[2] => 1.4
[3] => 0
[4] => 1

Dokładnie jak piszesz :-)
Przepraszam bardzo za pomyłkę

0

czy w tych tablicach zawsze będą po 3 elementy?
pierwszy to jakieś ID, drugi to login, trzeci to jakaś liczba, i Ciebie interesuje wrzucenie jednokrotnie ID, loginu, a potem tylko tych liczb na pozycji 2 (czyli trzeci element)?

0

Coś w ten deseń - pisane z palca.

function merge( ) {

   $args = func_get_args();
   $out  = Array();

   foreach( $args as $array ) 
      $out[ $array[0] ] = array_merge( $out[ $array[0] ], (count( $out ) ? array_shift( $array ) : $array);

   return $out.

}
0
dzek69 napisał(a):

czy w tych tablicach zawsze będą po 3 elementy?
pierwszy to jakieś ID, drugi to login, trzeci to jakaś liczba, i Ciebie interesuje wrzucenie jednokrotnie ID, loginu, a potem tylko tych liczb na pozycji 2 (czyli trzeci element)?

Dokładnie tak - o to mi chodzi :-)

0

niestety ta funkcja nie działa :-(

0
$tab1 = [
    [1, 'login', 1.4],
    [2, 'login2', 1.2],
    [3, 'trif', 30.2],
    [4, 'wojtek', 1],
];
$tab2 = [
    [3, 'trif', 134],
    [1, 'login', 0],
    [2, 'login2', 0],
    [4, 'wojtek', 0],
];
$tab3 = [
    [3, 'trif', 3],
    [1, 'login', 2],
    [2, 'login2', 1],
    [4, 'wojtek', 0],
];

function merge() {
    $args = func_get_args();
    $id = array_shift($args);
    $out  = [];

    foreach ($args[0] as $data) {
        if ($data[0]===$id) {
            $out = $data;
        }
    }

    for ($i=1; $i<count($args); $i++) {
        foreach ($args[$i] as $data) {
            if ($data[0]===$id) {
                $out[] = $data[2];
            }
        }
    }
    return $out;
}

print_r(merge(1, $tab1, $tab2, $tab3));

btw: następnym razem podawaj tablice w takiej formie jak w tym kodzie - przedruk print_r niepotrzebnie wydłuża post ;)

0

Dziękuję za odpowiedź. Ten kod zwraca mi:

Array
(
) 

nie łączy :-(

1

Skopiujesz do pliku całość jak leci, NIC NIE MODYFIKUJESZ, nie odejmujesz, dodajesz i zwraca Ci pustą tablicę?

Array
(
    [0] => 1
    [1] => login
    [2] => 1.4
    [3] => 0
    [4] => 2
)
0

teraz zaskoczyło - dziękuję bardzo za pomoc :-)

0

@Northwest używasz po prostu starej wersji PHP :p

0

Rozumiem ;-) muszę sobie zaktualizować w takim razie :-)

ps. w jaki sposób mogę sobie posortować tą tabelkę wynikową? :)

tzn. zrobiłem sobie:

 $lacznatabllica = merge(1, $tablica, $tablica2, $tablica3); 

i teraz np. chciałbym mieć wysortowanie po pierwszych wynikach, drugich i trzecich :)

kombinuję z funkcją:

 array_multisort($lacznatabllica, SORT_DESC, $lacznatabllica);

tylko to mi sortuje po 1 kolumnie.... a jak zrobić po kolejnych?:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1