So verschieben Sie Array-Werte von einem Array in ein anderes

Lesezeit: 4 Minuten

Benutzer-Avatar
Chirag Patel

Ich möchte den Wert eines Arrays mit einem bestimmten Schlüssel in ein anderes verschieben, zum Beispiel folgt mein erstes Array.

firstArray
(
    [0] => Array
        (
            [id] => 863
            [flag] => 2
            [qty] => 2
            [size] => 8
        )

    [1] => Array
        (
            [id] => 861
            [flag] => 2
            [qty] => 2
            [size] => 8
        )

)

Und das Folgende ist mein zweites Array

TwoArray
(
    [863] => Bead Headed Prince Nymphs size 18
    [861] => Bead Headed Prince Nymphs size 14
)

Und ich möchte ein Array mit kombinierten Werten wie

mainarray(
     [0] => Array
        (
            [id] => 863
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] =>Bead Headed Prince Nymphs size 18
        )

    [1] => Array
        (
            [id] => 861
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] => Bead Headed Prince Nymphs size 14
        )
)

Ich habe folgenden Code verwendet, aber ich konnte keine Ausgabe erhalten, die ich möchte.

$getResult = $wpdb->get_results("SELECT *FROM tablename");

if(isset($getResult) && !empty($getResult)){
    foreach($getResult as $val){

        $data = $val->fliesfromuser;

        $fliesFromStore = json_decode($val->fliesid_in_store,true);

        @$result = call_user_func_array('array_merge', $fliesFromStore);

        echo "<pre>first";
        print_r ($fliesFromStore);
        echo "</pre>";

        $postIds    = array_column($fliesFromStore, 'id');

        $args       = array(
            'post__in' =>$postIds,
            'post_type' =>'product'
        );

        $getStorePosts  = get_posts($args);
        $postTitle      = array_column($getStorePosts, 'post_title','ID');

        echo "<pre>Two";
        print_r ($postTitle);
        echo "</pre>";

        $test = array_merge($fliesFromStore,$postTitle);

        echo "<pre>";
        print_r ($test);
        echo "</pre>";
        die();
    }
}

Wenn jemand weiß, was ich in meinem Code falsch mache, dann hilf mir bitte dabei.

  • Werden sich Ihre IDs im ersten Array wiederholen? Das ist dieselbe ID in mehreren Sub-Arrays?

    – Arun

    12. Juli 2018 um 5:34 Uhr

Benutzer-Avatar
Andreas

Wenn Sie das erste Array assoziativ machen, ist eine einfache foreach-Schleife erforderlich.
Sie können firstarray assoziativ machen, indem Sie array_column verwenden.

// Make firstarray associative
$firstarray = array_column($firstarray, NULL,"id");

foreach($twoarray as $key => $val){
    $firstarray[$key]['name'] = $val;
}
var_dump($firstarray);

https://3v4l.org/Is3EC

Beachten Sie, dass firstarray assoziativ ist. Um die Assoziation zu entfernen, können Sie bei Bedarf array_values ​​verwenden.

Bearbeiten: Denken Sie daran, dass dieser Code davon ausgeht, dass die Schlüssel im zweiten Array im ersten vorhanden sind.
Wenn es nicht existiert, wird im ersten Array ein neues Element mit nur „Name“ erstellt.
Sie können isset() verwenden, um zunächst sicherzustellen, dass der $key in firstarray vorhanden ist.

foreach($twoarray as $key => $val){
    if(isset($firstarray[$key])) $firstarray[$key]['name'] = $val;
}

  • Ah! 52 Sekunden schneller als ich! 🙂 Aber das ist perfekt, ich bin ziemlich genau die gleiche Route gegangen: (eval.in/1035247), dachte aber nicht daran, die assoziative Array-Funktion einzuschließen.

    – Fritten

    12. Juli 2018 um 5:38 Uhr

  • @Frits poste es, deins ist wahrscheinlich schneller

    –Andreas

    12. Juli 2018 um 5:41 Uhr

  • @Andreas seine gute Antwort, aber wenn $firstarray[$key] nicht existiert dies wird einen Fehler zurückgeben, also denke ich, dass Sie überprüfen müssen, ob der Array-Schlüssel existiert

    – RainDev

    12. Juli 2018 um 5:45 Uhr

  • @ Rainmx93 Es wird kein Fehler erzeugt, aber ich habe ihn in der Antwort hinzugefügt. 3v4l.org/TrU5g

    –Andreas

    12. Juli 2018 um 5:46 Uhr


  • @ Rainmx93 – wenn die $firstarray[$key] nicht existiert, wird einfach ein ‘name => NULL’ zum Array hinzugefügt (Prüfung), die (wenn Sie es vorziehen) durch eine leere Zeichenfolge ersetzt werden könnte (Prüfung), aber gute Arbeit beim Aufheben!

    – Fritten

    12. Juli 2018 um 5:51 Uhr

Eine etwas andere Version als die Antwort von @Andreas:

Es verwendet immer noch eine schnelle foreach-Schleife, um die richtigen Array-Werte zusammenzuführen, nur ohne das assoziative Array zu verwenden.

$fliesFromStore = array(
    array(
        'id'    => 863,
        'flag'  => 2,
        'qty'   => 2,
        'size'  => 8
        ),
    array(
        'id'     => 861,
        'flag'   => 2,
        'qty'    => 2,
        'size'   => 8
    ),
);

$postTitles = array(
    863 => 'Bead Headed Prince Nymphs size 18',
    861 => 'Bead Headed Prince Nymphs size 14'
);

foreach ($fliesFromStore as $key => $fly) {
    $fliesFromStore[$key]['name']   = $postTitles[$fly['id']];
}

var_dump($fliesFromStore);

Dies wird ausgeben:

Array
(
    [0] => Array
        (
            [id] => 863
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] => Bead Headed Prince Nymphs size 18
        )

    [1] => Array
        (
            [id] => 861
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] => Bead Headed Prince Nymphs size 14
        )
)

Hier ist ein laufendes Beispiel: https://eval.in/1035247

  • Dies ist höchstwahrscheinlich schneller, insbesondere wenn es sich um ein großes Array handelt.

    –Andreas

    12. Juli 2018 um 5:49 Uhr

Eine schnellere leichte Variante von oben könnte es sein

<?php
$array1[] = [ 'id'=>863, 'flag'=>2, 'qty'=>2, 'size'=>8 ];
$array1[] = [ 'id'=>861, 'flag'=>2, 'qty'=>2, 'size'=>8 ];

$array2[863] = 'Bead Headed Prince Nymphs size 18';
$array2[861] = 'Bead Headed Prince Nymphs size 19';

foreach( $array1 as &$arr1 ) {
      $arr1['value']   = $array2[$arr1['id']];
}
print_r($array1);


?>

1100990cookie-checkSo verschieben Sie Array-Werte von einem Array in ein anderes

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy