PHP의 모든 위치에 배열에 새 항목 삽입
PHPPHP의 모든 위치에 배열에 새 항목 삽입
새 항목을 배열의 중간에있는 모든 위치에 삽입하려면 어떻게해야합니까?
해결법
-
==============================
1.좀 더 직관적 인 것을 알 수 있습니다. array_splice에 대한 하나의 함수 호출 만 필요합니다.
좀 더 직관적 인 것을 알 수 있습니다. array_splice에 대한 하나의 함수 호출 만 필요합니다.
$original = array( 'a', 'b', 'c', 'd', 'e' ); $inserted = array( 'x' ); // not necessarily an array, see manual quote array_splice( $original, 3, 0, $inserted ); // splice in at position 3 // $original is now a b c x d e
-
==============================
2.정수와 문자열 위치 모두에 삽입 할 수있는 함수 :
정수와 문자열 위치 모두에 삽입 할 수있는 함수 :
/** * @param array $array * @param int|string $position * @param mixed $insert */ function array_insert(&$array, $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) ); } }
정수 사용법 :
$arr = ["one", "two", "three"]; array_insert( $arr, 1, "one-half" ); // -> array ( 0 => 'one', 1 => 'one-half', 2 => 'two', 3 => 'three', )
문자열 사용법 :
$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', ), )
-
==============================
3.
$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)
-
==============================
4.이렇게하면 배열을 삽입 할 수 있습니다.
이렇게하면 배열을 삽입 할 수 있습니다.
function array_insert(&$array, $value, $index) { return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array); }
-
==============================
5.네가 요청한 것을 정확히 할 수있는 네이티브 PHP 함수 (내가 알고있는)가 없다.
네가 요청한 것을 정확히 할 수있는 네이티브 PHP 함수 (내가 알고있는)가 없다.
나는 목적에 부합한다고 믿는 두 가지 방법을 썼다.
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; }
더 빠르고 더 많은 메모리를 효율적으로 사용할 수 있지만 배열의 키를 유지할 필요가없는 경우에만 적합합니다.
키를 유지해야하는 경우 다음이 더 적합합니다.
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; }
-
==============================
6.
function insert(&$arr, $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; }
-
==============================
7.이것은 또한 효과적인 해결책입니다 :
이것은 또한 효과적인 해결책입니다 :
function array_insert(&$array,$element,$position=null) { 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; }
크레딧은 다음으로 이동합니다. http://binarykitten.com/php/52-php-insert-element-and-shift.html
-
==============================
8.@ 할일 위대한 답변을 바탕으로, 여기에 간단한 기능을 어떻게 특정 키 다음에 새 요소를 삽입하는 것입니다, 정수 키를 유지하면서
@ 할일 위대한 답변을 바탕으로, 여기에 간단한 기능을 어떻게 특정 키 다음에 새 요소를 삽입하는 것입니다, 정수 키를 유지하면서
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) ); }
-
==============================
9.이것을 사용할 수 있습니다.
이것을 사용할 수 있습니다.
foreach ($array as $key => $value) { if($key==1) { $new_array[]=$other_array; } $new_array[]=$value; }
-
==============================
10.일반적으로 스칼라 값은 다음과 같습니다.
일반적으로 스칼라 값은 다음과 같습니다.
$elements = array('foo', ...); array_splice($array, $position, $length, $elements);
단일 배열 요소를 배열에 삽입하려면 배열에 배열을 두는 것을 잊지 마십시오 (스칼라 값이므로!) :
$element = array('key1'=>'value1'); $elements = array($element); array_splice($array, $position, $length, $elements);
그렇지 않으면 배열의 모든 키가 하나씩 추가됩니다.
-
==============================
11.배열의 시작 부분에 요소를 추가하기위한 힌트 :
배열의 시작 부분에 요소를 추가하기위한 힌트 :
$a = array('first', 'second'); $a[-1] = 'i am the new first element';
그때:
foreach($a as $aelem) echo $a . ' '; //returns first, second, i am...
그러나:
for ($i = -1; $i < count($a)-1; $i++) echo $a . ' '; //returns i am as 1st element
-
==============================
12.확실하지 않은 경우 다음을 사용하십시오.
확실하지 않은 경우 다음을 사용하십시오.
$arr1 = $arr1 + $arr2;
또는
$arr1 += $arr2;
with + 원래 배열을 덮어 씁니다. (출처 참조)
-
==============================
13.이거 한번 해봐:
이거 한번 해봐:
$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; }
-
==============================
14.jay.lee의 솔루션은 완벽합니다. 다차원 배열에 항목을 추가하려면 먼저 단일 차원 배열을 추가 한 다음 나중에 대체하십시오.
jay.lee의 솔루션은 완벽합니다. 다차원 배열에 항목을 추가하려면 먼저 단일 차원 배열을 추가 한 다음 나중에 대체하십시오.
$original = ( [0] => Array ( [title] => Speed [width] => 14 ) [1] => Array ( [title] => Date [width] => 18 ) [2] => Array ( [title] => Pineapple [width] => 30 ) )
이 배열에 같은 형식의 항목을 추가하면 모든 새로운 배열 색인이 항목이 아닌 항목으로 추가됩니다.
$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
참고 : array_splice를 사용하여 항목을 다차원 배열에 직접 추가하면 모든 항목의 색인이 해당 항목이 아닌 항목으로 추가됩니다.
-
==============================
15.초기 배열의 키를 유지하고 키가있는 배열을 추가하려면 다음 함수를 사용하십시오.
초기 배열의 키를 유지하고 키가있는 배열을 추가하려면 다음 함수를 사용하십시오.
function insertArrayAtPosition( $array, $insert, $position ) { /* $array : The initial array i want to modify $insert : the new array i want to add, eg array('key' => 'value') or array('value') $position : the position where the new array will be inserted into. Please mind that arrays start at 0 */ return array_slice($array, 0, $position, TRUE) + $insert + array_slice($array, $position, NULL, TRUE); }
전화 예 :
$array = insertArrayAtPosition($array, array('key' => 'Value'), 3);
-
==============================
16.이것이 연관 배열에 대한 저에게 도움이되었습니다.
이것이 연관 배열에 대한 저에게 도움이되었습니다.
/* * Inserts a new key/value after the key in the array. * * @param $key * The key to insert after. * @param $array * An array to insert in to. * @param $new_key * The key to insert. * @param $new_value * An value to insert. * * @return * The new array if the key exists, FALSE otherwise. * * @see array_insert_before() */ function array_insert_after($key, array &$array, $new_key, $new_value) { if (array_key_exists($key, $array)) { $new = array(); foreach ($array as $k => $value) { $new[$k] = $value; if ($k === $key) { $new[$new_key] = $new_value; } } return $new; } return FALSE; }
함수 소스 -이 블로그 게시물. 특정 키를 삽입하기위한 편리한 기능도 있습니다.
-
==============================
17.문자열 키가있는 배열에 요소를 삽입하려면 다음과 같이 할 수 있습니다.
문자열 키가있는 배열에 요소를 삽입하려면 다음과 같이 할 수 있습니다.
/* insert an element after given array key * $src = array() array to work with * $ins = array() to insert in key=>array format * $pos = key that $ins will be inserted after */ 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); }
from https://stackoverflow.com/questions/3797239/insert-new-item-in-array-on-any-position-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP 반향 대 PHP 단축 태그 (0) | 2018.09.12 |
---|---|
PHP : 예약 된 작업 실행 (cron 작업) (0) | 2018.09.12 |
foreach 루프에서 첫 번째와 마지막 반복을 확인하는 방법은 무엇입니까? (0) | 2018.09.12 |
PHP에서 PDF 문서를 미리보기 이미지로 변환하려면 어떻게해야합니까? [닫은] (0) | 2018.09.12 |
PHP exec ()의 sudo (0) | 2018.09.12 |