복붙노트

PHP의 모든 위치에 배열에 새 항목 삽입

PHP

PHP의 모든 위치에 배열에 새 항목 삽입

새 항목을 배열의 중간에있는 모든 위치에 삽입하려면 어떻게해야합니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.이렇게하면 배열을 삽입 할 수 있습니다.

    이렇게하면 배열을 삽입 할 수 있습니다.

    function array_insert(&$array, $value, $index)
    {
        return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array);
    }
    
  5. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    9.이것을 사용할 수 있습니다.

    이것을 사용할 수 있습니다.

    foreach ($array as $key => $value) 
    {
        if($key==1)
        {
            $new_array[]=$other_array;
        }   
        $new_array[]=$value;    
    }
    
  10. ==============================

    10.일반적으로 스칼라 값은 다음과 같습니다.

    일반적으로 스칼라 값은 다음과 같습니다.

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

    단일 배열 요소를 배열에 삽입하려면 배열에 배열을 두는 것을 잊지 마십시오 (스칼라 값이므로!) :

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

    그렇지 않으면 배열의 모든 키가 하나씩 추가됩니다.

  11. ==============================

    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. ==============================

    12.확실하지 않은 경우 다음을 사용하십시오.

    확실하지 않은 경우 다음을 사용하십시오.

    $arr1 = $arr1 + $arr2;
    

    또는

    $arr1 += $arr2;
    

    with + 원래 배열을 덮어 씁니다. (출처 참조)

  13. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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); 
    } 
    
  18. from https://stackoverflow.com/questions/3797239/insert-new-item-in-array-on-any-position-in-php by cc-by-sa and MIT license