2016-03-28 14 views
0

I haben eine Funktion, die eine Anordnung wie diesein einem anderen Array Flatten PHP-Array an bestimmten Position

Array 
(
[0] => Array 
    (
     [name] => Percent 
     [attributes] => Array 
      (
       [Percent] => 50 
      ) 
    ) 

[1] => Array 
    (
     [name] => Percent 
     [attributes] => Array 
      (
       [Percent] => 50 
      ) 
    ) 
) 

I oben ähnliche

zu einem anderen Array jedes Element hinzufügen müssen, kehrt
Array 
(
    [0] => Array 
     (
      [name] => Name 
      [value] => Johan 
    ) 
    [1] => Array 
     (
      [name] => Address 
      [value] => Mayfair Lane 
    ) 
) 

Die Sache Ich brauche die ersten Array-Elemente auf der gleichen Ebene des zweiten Arrays, in der Mitte, zwischen den ersten und zweiten Elemente der zweiten Arrays eingefügt.

Array 
(
    [0] => Array 
     (
      [name] => Name 
      [value] => Johan 
    ) 
    [1] => Array 
    (
     [name] => Percent 
     [attributes] => Array 
      (
       [Percent] => 50 
      ) 
    ) 
    [2] => Array 
    (
     [name] => Percent 
     [attributes] => Array 
      (
       [Percent] => 50 
      ) 
     ) 
    ) 
    [3] => Array 
     (
      [name] => Address 
      [value] => Mayfair Lane 
    ) 
) 

Das Problem ist, wenn ich das erste Array nur hinzufügen, wie es ist, in der Mitte (seine eigene Variable), fügt es wie dies

Array 
(
    [0] => Array 
     (
      [name] => Name 
      [value] => Johan 
    ) 
    [1] => Array 
     (
      [0] => Array 
      (
       [name] => Percent 
       [attributes] => Array 
       (
        [Percent] => 50 
       ) 
      ) 
      [1] => Array 
      (
       [name] => Percent 
       [attributes] => Array 
       (
        [Percent] => 50 
       ) 
      ) 
    ) 
    [2] => Array 
     (
      [name] => Address 
      [value] => Mayfair Lane 
    ) 
) 

ich array_merge habe gesucht, aber ofcourse Kann ich nicht angeben, die 2. Array-Elemente gehen in der Mitte, wie ich brauche.

+0

ich es mit einer foreach-Schleife –

+0

yeh @Dragon foreach funktionieren würde tun könnte, aber ich war nicht sicher, ob es das effizienteste. Würden Sie 'array_splice' dort verwenden? – yoyoma

+0

Ja, du kannst es auch posten. So können wir das Problem in Ihrem Foreach-Algorithmus sehen. – rmondesilva

Antwort

1

Sie brauchen nicht zu tun Looping. Teilen Sie sie in 2. Mischen Sie den ersten Teil, den mittleren, den Sie einfügen möchten, den zweiten Teil.

$arr1 = array(
    array(
     'name' => 'Percent', 
     'attributes' => array('Percent'=>50) 
    ), 
    array(
     'name' => 'Percent', 
     'attributes' => array('Percent'=>50) 
    ) 
); 

$arr2 = array(
    array(
     'name'=>'Name', 
     'value'=>'Johan' 
     ), 
    array(
     'name'=>'Address', 
     'value'=>'Mayfair Lane' 
     ) 
); 

$mid = count($arr2)/2; 

$chunks = array_chunk($arr2, $mid); 

$merged = array_merge($chunks[0], $arr1, $chunks[1]); 

var_dump($merged); 

RESULT

array(4) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(4) "Name" 
    ["value"]=> 
    string(5) "Johan" 
    } 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(7) "Percent" 
    ["attributes"]=> 
    array(1) { 
     ["Percent"]=> 
     int(50) 
    } 
    } 
    [2]=> 
    array(2) { 
    ["name"]=> 
    string(7) "Percent" 
    ["attributes"]=> 
    array(1) { 
     ["Percent"]=> 
     int(50) 
    } 
    } 
    [3]=> 
    array(2) { 
    ["name"]=> 
    string(7) "Address" 
    ["value"]=> 
    string(12) "Mayfair Lane" 
    } 
} 

See for yourself

1

Sie benötigen array_splice(), z.B .:

array_splice (zweiter $, 1, 0, $ first);

+0

Gedanken darüber, was erforderlich ist massieren - aber es wird unordentlich, abhängig davon, wie viele innere Elemente du hinzufügen musst - dieser Positionsparameter benötigt Zähler und wieder, nicht sicher, ob es die sauberste Lösung ist? – yoyoma

+0

Ich bin nicht sicher, was sauberer als ein einzelner Funktionsaufruf sein könnte. Nur zur Verdeutlichung - mein Beispiel wird alle Elemente von $ first in $ second an Position 1 setzen, d. H. Nach dem ersten Element, das bereits in $ sec ist. Die Elemente werden auf die gleiche "Ebene" gebracht. Weitere Informationen zu array_splice() finden Sie im [Manual] (http://php.net/manual/en/function.array-splice.php). Abhängig von Ihrer Definition von "Mitte" könnten Sie den zweiten Parameter entsprechend aktualisieren, z. 'Array_splice (zweiter $, count ($ s)/2, 0, $ zuerst);' – rubble

+0

ja ich weiß wot u sagen, wot ich nicht sauber meine, ist die Tatsache, dass was ist, wenn die innere Anordnung 5 Elemente, 10 Elemente, 50 Elemente? Ich brauche einen Zähler in der foreach-Schleife, um diesen Positionsparameter zu verfolgen.Nicht zu sagen, es ist falsch, nur auf der Suche nach der schönsten Lösung – yoyoma

Verwandte Themen