Įdėkite naują elementą į masyvą bet kurioje PHP vietoje

Kaip įterpti naują elementą į masyvą bet kurioje padėtyje, pavyzdžiui, masyvo viduryje?

332
26 сент. rinkinys kusanagi 26 sep . 2010-09-26 12:39 '10, 12:39, 2010-09-26 12:39
@ 15 atsakymų

Tai gali būti šiek tiek intuityvus. Tam reikia tik vieno skambučio į array_splice funkciją:

 $original = array( 'a', 'b', 'c', 'd', 'e' ); $inserted = array( 'x' ); // Not necessarily an array array_splice( $original, 3, 0, $inserted ); // splice in at position 3 // $original is now abcxde 
654
26 сент. atsakymą pateikė jay.lee 26 rugsėjis 2010-09-26 14:14 '10, 14:14, 2010-09-26 14:14

Funkcija, kurią galima įterpti tiek sveikuoju, tiek eilutėmis:

  function array_insert( $position, $insert) { if (is_int($position)) { array_splice($array, $position, 0, $insert); } else { $pos = array_search($position, array_keys($array)); $array = array_merge( array_slice($array, 0, $pos), $insert, array_slice($array, $pos) ); } } 

Visas naudojimas:

 $arr = ["one", "two", "three"]; array_insert( $arr, 1, "one-half" ); // -> array ( 0 => 'one', 1 => 'one-half', 2 => 'two', 3 => 'three', ) 

Naudoti eilutę:

 $arr = [ "name" => [ "type" => "string", "maxlength" => "30", ], "email" => [ "type" => "email", "maxlength" => "150", ], ]; array_insert( $arr, "email", [ "phone" => [ "type" => "string", "format" => "phone", ], ] ); // -> array ( 'name' => array ( 'type' => 'string', 'maxlength' => '30', ), 'phone' => array ( 'type' => 'string', 'format' => 'phone', ), 'email' => array ( 'type' => 'email', 'maxlength' => '150', ), ) 
32
13 сент. atsakymas pateikiamas Halil Özgür 13 sep. 2013-09-13 11:24 '13, 11:24, 2013-09-13 11:24
 $a = array(1, 2, 3, 4); $b = array_merge(array_slice($a, 0, 2), array(5), array_slice($a, 2)); // $b = array(1, 2, 5, 3, 4) 
19
26 сент. atsakymas duotas gintaro 26 sep. 2010-09-26 12:46 '10, 12:46, 2010-09-26 12:46

Taigi galite įterpti matricas:

 function array_insert( $value, $index) { return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array); } 
3
05 окт. atsakymas pateikiamas Aleksandr Makov 05 okt. 2012-10-05 11:31 '12 11:31 2012-10-05 11:31

Nėra integruotos PHP funkcijos (kurią aš žinau), kuri gali atlikti būtent tai, ko prašėte.

Aš parašiau du metodus, kurie, mano manymu, yra tinkami šiam tikslui:

 function insertBefore($input, $index, $element) { if (!array_key_exists($index, $input)) { throw new Exception("Index not found"); } $tmpArray = array(); $originalIndex = 0; foreach ($input as $key => $value) { if ($key === $index) { $tmpArray[] = $element; break; } $tmpArray[$key] = $value; $originalIndex++; } array_splice($input, 0, $originalIndex, $tmpArray); return $input; } function insertAfter($input, $index, $element) { if (!array_key_exists($index, $input)) { throw new Exception("Index not found"); } $tmpArray = array(); $originalIndex = 0; foreach ($input as $key => $value) { $tmpArray[$key] = $value; $originalIndex++; if ($key === $index) { $tmpArray[] = $element; break; } } array_splice($input, 0, $originalIndex, $tmpArray); return $input; } 

Nors tai yra greita ir tikriausiai efektyvesnė atmintis, tai iš tikrųjų yra reali, kai nereikia palaikyti masyvo raktų.

Jei reikia išlaikyti raktus, būtų tinkamesnė:

 function insertBefore($input, $index, $newKey, $element) { if (!array_key_exists($index, $input)) { throw new Exception("Index not found"); } $tmpArray = array(); foreach ($input as $key => $value) { if ($key === $index) { $tmpArray[$newKey] = $element; } $tmpArray[$key] = $value; } return $input; } function insertAfter($input, $index, $newKey, $element) { if (!array_key_exists($index, $input)) { throw new Exception("Index not found"); } $tmpArray = array(); foreach ($input as $key => $value) { $tmpArray[$key] = $value; if ($key === $index) { $tmpArray[$newKey] = $element; } } return $tmpArray; } 
3
12 авг. Atsakymas suteiktas po 12 metų amžiaus berniukui . 2013-08-12 15:16 '13, 15:16, 2013-08-12 15:16

Galite tai naudoti

 foreach ($array as $key => $value) { if($key==1) { $new_array[]=$other_array; } $new_array[]=$value; } 
1
25 февр. Atsakymą pateikė „ Parkhya“ kūrėjas . 2017-02-25 12:24 '17 12:24 pm 2017-02-25 12:24

jei nežinote, tada NEGALIMA NAUDOTI ŠIĄ :

 $arr1 = $arr1 + $arr2; 

Or

 $arr1 += $arr2; 

nes originalus + masyvas bus perrašytas. ( žr. šaltinį )

0
03 мая '15 в 20:06 2015-05-03 20:06 Atsakymą pateikė T.Todua gegužės 03 d. 15 val. 20:06 2015-05-03 20:06
 function insert( $value, $index){ $lengh = count($arr); if($index<0||$index>$lengh) return; for($i=$lengh; $i>$index; $i--){ $arr[$i] = $arr[$i-1]; } $arr[$index] = $value; } 
0
06 марта '13 в 11:44 2013-03-06 11:44 atsakymą pateikė henry wong kovo 13 d. 13 val. 11:44 2013-03-06 11:44

Tai taip pat yra darbinis sprendimas:

 function array_insert( { if (count($array) == 0) { $array[] = $element; } elseif (is_numeric($position)  $position < 0) { if((count($array)+position) < 0) { $array = array_insert($array,$element,0); } else { $array[count($array)+$position] = $element; } } elseif (is_numeric($position)  isset($array[$position])) { $part1 = array_slice($array,0,$position,true); $part2 = array_slice($array,$position,null,true); $array = array_merge($part1,array($position=>$element),$part2); foreach($array as $key=>$item) { if (is_null($item)) { unset($array[$key]); } } } elseif (is_null($position)) { $array[] = $element; } elseif (!isset($array[$position])) { $array[$position] = $element; } $array = array_merge($array); return $array; } 

Kreditai: http://binarykitten.com/php/52-php-insert-element-and-shift.html

0
09 янв. Mike Doh atsakymas, pateiktas sausio 09 d 2014-01-09 20:25 '14, 20:25, 2014-01-09 20:25

Paprastai su skaliarinėmis vertėmis:

 $elements = array('foo', ...); array_splice($array, $position, $length, $elements); 

Jei norite į savo masyvą įterpti vieną masyvo elementą, nepamirškite masyvo įvesti į masyvą (nes tai buvo skaliarinė vertė!):

 $element = array('key1'=>'value1'); $elements = array($element); array_splice($array, $position, $length, $elements); 

kitaip visi masyvo klavišai bus įtraukti į dalis.

0
26 нояб. atsakymas duotas ženklu 26 lapkričio. 2012-11-26 00:18 '12 0:18 2012-11-26 00:18

Patarimas pridėti elementą masyvo pradžioje :

 $a = array('first', 'second'); $a[-1] = 'i am the new first element'; 

kad

 foreach($a as $aelem) echo $a . ' '; //returns first, second, i am... 

a

 for ($i = -1; $i < count($a)-1; $i++) echo $a . ' '; //returns i am as 1st element 
0
06 марта '13 в 19:22 2013-03-06 19:22 atsakymas pateikiamas forsberg kovo 13 d. 13 val. 19:22 2013-03-06 19:22

Jay.lee sprendimas yra puikus. Jei norite pridėti elementą į daugiamatę masyvą, pirmiausia pridėkite vieną matmenį ir pakeiskite vėliau.

 $original = ( [0] => Array ( [title] => Speed [width] => 14 ) [1] => Array ( [title] => Date [width] => 18 ) [2] => Array ( [title] => Pineapple [width] => 30 ) ) 

Įtraukus elementą į tą patį formatą į šį masyvą, visi elementai bus įtraukti į visus naujus masyvo indeksus, o ne tik elementus.

 $new = array( 'title' => 'Time', 'width' => 10 ); array_splice($original,1,0,array('random_string')); // can be more items $original[1] = $new; // replaced with actual item 

Pastaba Įtraukus elementus tiesiai į daugiamatę masyvą masyvo_papildymu , visi elementai bus įtraukti kaip elementai, o ne tik šis elementas.

0
20 окт. Abdul Mannan atsakymas, pateiktas spalio 20 d. 2016-10-20 13:56 '16 at 16:56 pm 2016-10-20 13:56

Pabandykite atlikti šiuos veiksmus:

 $colors = array('red', 'blue', 'yellow'); $colors = insertElementToArray($colors, 'green', 2); function insertElementToArray($arr = array(), $element = null, $index = 0) { if ($element == null) { return $arr; } $arrLength = count($arr); $j = $arrLength - 1; while ($j >= $index) { $arr[$j+1] = $arr[$j]; $j--; } $arr[$index] = $element; return $arr; } 
0
25 марта '16 в 0:56 2016-03-25 00:56 atsakymas pateikiamas maksimaliai kovo 25 d. 16 val. 0:56 2016-03-25 00:56

Remiantis puikiu „@Halil“ atsakymu, čia yra paprasta funkcija, kaip įterpti naują elementą po tam tikro rakto, išsaugant visus raktus:

 private function arrayInsertAfterKey($array, $afterKey, $key, $value){ $pos = array_search($afterKey, array_keys($array)); return array_merge( array_slice($array, 0, $pos, $preserve_keys = true), array($key=>$value), array_slice($array, $pos, $preserve_keys = true) ); } 
0
23 окт. atsakymas pateiktas d.raev 23 d. 2014-10-23 07:46 '14 at 7:46 2014-10-23 07:46

Norėdami įterpti elementus į masyvą su eilutės klavišais, galite tai padaryti:

  function array_insert_string_keys($src,$ins,$pos) { $counter=1; foreach($src as $key=>$s){ if($key==$pos){ break; } $counter++; } $array_head = array_slice($src,0,$counter); $array_tail = array_slice($src,$counter); $src = array_merge($array_head, $ins); $src = array_merge($src, $array_tail); return($src); } 
-1
08 мая '12 в 19:16 2012-05-08 19:16 atsakė Bryan Plasters gegužės 08, 12, 19:16 2012-05-08 19:16

Kiti klausimai apie žymių arba Užduoti klausimą