함수 - php 연관배열 삭제




PHP:배열에서 요소 삭제하기 (20)

unset 인덱스를 변경하지 않지만 array_splice는 변경합니다.

$arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    array_splice($arrayName, 1,2);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )



    $arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    unset($arrayName[1]);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )

foreach ($array) 더 이상 요소가 포함되지 않도록 PHP 사용하여 배열에서 요소를 삭제하는 쉬운 방법이 있습니까?

나는 null 설정하는 것이 좋다고 생각했지만 분명히 작동하지 않는다.


배열에서 여러 개의 조각화 된 요소를 unset ()합니다.

unset ()이 여러 번 언급되었지만 unset ()은 여러 변수를 받아들이므로 하나의 연산으로 배열에서 인접하지 않은 여러 요소를 쉽게 삭제할 수 있습니다.

// Delete multiple, noncontiguous elements from an array
$array = [ 'foo', 'bar', 'baz', 'quz' ];
unset( $array[2], $array[3] );
print_r($array);
// Output: [ 'foo', 'bar' ]

동적으로 unset ()

unset ()은 제거 할 키 배열을 허용하지 않으므로 아래의 코드는 실패합니다 (unset ()을 사용하는 것이 약간 쉬워졌습니다).

$array = range(0,5);
$remove = [1,2];
$array = unset( $remove ); // FAILS: "unexpected 'unset'"
print_r($array);

대신 unset ()은 foreach 루프에서 동적으로 사용할 수 있습니다.

$array = range(0,5);
$remove = [1,2];
foreach ($remove as $k=>$v) {
    unset($array[$v]);
}
print_r($array);
// Output: [ 0, 3, 4, 5 ]

배열을 복사하여 배열 키를 제거하십시오.

아직 언급되지 않은 또 다른 방법이 있습니다. 때로 특정 배열 키를 제거하는 가장 간단한 방법은 $ array1을 $ array2에 복사하는 것입니다.

$array1 = range(1,10);
foreach ($array1 as $v) {
    // Remove all even integers from the array
    if( $v % 2 ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 1, 3, 5, 7, 9 ];

분명히 텍스트 문자열에도 같은 방법이 적용됩니다.

$array1 = [ 'foo', '_bar', 'baz' ];
foreach ($array1 as $v) {
    // Remove all strings beginning with underscore
    if( strpos($v,'_')===false ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 'foo', 'baz' ]

PHP에서 배열로부터 요소를 삭제할 때 사용할 좋은 함수는 unset 함수입니다. 다음은 사용 예입니다.

$anArray = array("X", "Y", "Z");

unset($anArray[0]);

//'dumps' the content of $anArray to the page:
var_dump($anArray);  

var_dump 함수의 출력은 다음과 같습니다.

array(2) { [1]=> string(1) "Y" [2]=> string(1) "Z" }

검색을 피하기 위해 array_diff 를 가지고 놀 수 있습니다 :

$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11

이 경우 키를 검색 / 사용할 필요가 없습니다.


나는 단지 변수가있는 특정 Object를 가졌다 고 말하고 싶다. (기본적으로 테이블을 매핑하고 테이블의 열을 변경했기 때문에 테이블의 속성을 바꿀 수있다.

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){} 
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]); 
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

$ fields 의 전체 목적은 변경 되었기 때문에 코드의 모든 부분을 볼 필요가 없었기 때문에 클래스의 시작 부분을보고 속성 목록과 $ fields 배열 내용을 변경하여 새로운 속성.

이것을 알아 내기 위해 잠시 나갔다. 희망이 사람을 도울 수 있습니다.


단순히 unset() 을 사용하여 배열을 삭제할 수 있습니다.

foreach 함수 후에 배열을 설정 해제해야합니다.


모든 값이 고유하거나 (고유하지 않지만 특정 값의 모든 인스턴스를 제거하려는 경우) 숫자로 인덱스 된 배열을 사용하는 경우 array_diff ()를 사용하여 다음과 같이 일치하는 요소를 제거하면됩니다.

$my_array = array_diff($my_array, array('Value_to_remove'));

예 :

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

그러면 다음이 표시됩니다.

4
3

이 예제에서 'Charles'값을 갖는 요소는 초기 배열에 대해 크기 4를보고하는 sizeof () 호출에 의해 검증 될 수 있도록 제거되고 제거 후에는 3이 제거됩니다.


배열 요소를 삭제하는 방법에는 여러 가지가 있으며, 일부는 다른 특정 작업보다 유용합니다.

하나의 배열 요소 삭제

하나의 배열 요소 만 삭제하려면 unset() 또는 대체 array_splice() 사용할 수 있습니다.

또한 값이 있고 요소를 삭제할 키를 모르는 경우 array_search() 를 사용하여 키를 가져올 수 있습니다.

unset() 메서드

unset() 을 사용하면 배열 키가 변경 / 재 색인되지 않습니다. 키를 다시 색인하려면 unset() 다음에 array_values() 사용하면 모든 키를 0에서 시작하는 숫자 열거 형 키로 변환합니다.

암호

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    unset($array[1]);
               //↑ Key which you want to delete

?>

산출

Array (
    [0] => a
    [2] => c
)

array_splice() 메서드

array_splice() 를 사용하면 키가 자동으로 다시 색인화되지만 연관 키는 모든 키를 숫자 키로 변환하는 array_values() 와 반대로 변경되지 않습니다.

또한 array_splice() 에는 키가 아닌 오프셋이 필요합니다! 두 번째 매개 변수로

암호

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    array_splice($array, 1, 1);
                       //↑ Offset which you want to delete

?>

산출

Array (
    [0] => a
    [1] => c
)

array_splice() unset() array_splice() 과 동일하게 배열을 참조로 가져옵니다. 즉,이 함수의 반환 값을 배열에 다시 할당하고 싶지는 않습니다.

여러 배열 요소 삭제

여러 배열 요소를 삭제하고 unset() 또는 array_splice() 여러 번 호출하지 않으려는 경우 array_diff() 또는 array_diff_key() 함수를 사용할 수 있습니다. 당신은 삭제하고 싶다.

array_diff() 메소드

삭제할 배열 요소의 값을 알고 있으면 array_diff() 사용할 수 있습니다. 이전과 마찬가지로 unset() 을 사용하면 배열의 키를 변경 / 다시 색인화하지 않습니다.

암호

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff($array, ["a", "c"]);
                              //└────────┘→ Array values which you want to delete

?>

산출

Array (
    [1] => b
)

array_diff_key() 메소드

삭제할 요소의 키를 알고 있으면 array_diff_key() 를 사용하려고합니다. 여기에서는 두 번째 매개 변수에서 값으로가 아닌 키를 키로 전달해야합니다. 그렇지 않으면 array_flip() 하여 배열을 뒤집어 야합니다. 또한 여기서 키는 변경 / 다시 색인화되지 않습니다.

암호

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   //↑           ↑ Array keys which you want to delete
?>

산출

Array (
    [1] => b
)

또한 unset() 또는 array_splice() 를 사용하여 동일한 값을 가진 여러 요소를 삭제하려는 경우 array_keys() 를 사용하여 특정 값에 대한 모든 키를 가져온 다음 모든 요소를 ​​삭제할 수 있습니다.


배열이 있다고 가정 해 보겠습니다.

Array
(
    [user_id] => 193
    [storage] => 5
)

storage 을 삭제하려면 다음을 수행하십시오.

unset($attributes['storage']);
$attributes = array_filter($attributes);

그리고 당신은 얻습니다 :

Array
(
    [user_id] => 193
)

비 정수 키를 사용하는 연관 배열의 경우 :

간단히 unset($array[$key]) 가 작동합니다.

정수 키가있는 배열 및 키를 유지하려면 다음을 수행하십시오.

  1. $array = [ 'mango', 'red', 'orange', 'grapes'];

unset($array[2]); $array = array_values($array);

  1. array_splice($array, 2, 1);

이것은 도움이 될 수 있습니다 ...

<?php
    $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
    $a2=array("a"=>"purple","b"=>"orange");
    array_splice($a1,0,2,$a2);
    print_r($a1);
    ?>

결과는 다음과 같습니다.

Array ( [0] => purple [1] => orange [c] => blue [d] => yellow )

unset() 은 문자열 인덱스 (해시 테이블로 배열)를 사용할 때 기대할 수있는 인덱스를 그대로 유지하지만 정수 인덱스 배열을 처리 할 때 상당히 놀랄 수 있다는 점에 유의해야합니다.

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

정수형 키를 정규화하려면 array_splice() 사용할 수 있습니다. 또 다른 옵션은 unset() 다음에 array_values() 사용하는 것입니다.

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

배열의 단일 요소를 삭제합니다.

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

출력은 다음과 같습니다.

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

배열의 색인을 다시 생성해야하는 경우 :

$array1 = array_values($array1);
var_dump($array1);

그러면 출력은 다음과 같습니다.

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

배열 끝에서 원소를 팝 - 제거 된 원소의 값을 반환

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

출력은

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

배열에서 첫 번째 요소 (빨간색)를 제거합니다 . - 제거 된 요소의 값을 반환합니다.

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

출력은 다음과 같습니다.

Array
(
    [b] => green
    [c] => blue
)
First Color: red

솔루션 :

  1. 요소 하나를 삭제하려면 unset() .
unset($array[3]);
unset($array['foo']);
  1. 인접하지 않은 요소를 여러 개 삭제하려면 unset() .
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. 인접한 여러 요소를 삭제하려면 array_splice() .
array_splice($array, $offset, $length);

추가 설명 :

이 함수를 사용하면 PHP에서 이러한 요소에 대한 모든 참조가 제거됩니다. 배열에 키를 보관하려고하지만 값이 비어 있으면 빈 문자열을 요소에 할당합니다.

$array[3] = $array['foo'] = '';

구문 외에도 unset() 을 사용하고 ''을 요소에 할당하는 것과는 논리적 인 차이가 있습니다. 첫 번째는 This doesn't exist anymore, 말하며 두 번째는 This still exists, but its value is the empty string.

숫자를 다루는 경우 0을 지정하는 것이 더 나은 대안 일 수 있습니다. 따라서 회사에서 모델 XL1000 스프로킷의 생산을 중단하면 재고를 다음과 같이 업데이트합니다.

unset($products['XL1000']);

그러나 일시적으로 XL1000 스프라켓을 다 써 버렸지 만 이번 주말에 공장에서 새 발송물을 수령 할 계획이라면 더 좋습니다.

$products['XL1000'] = 0;

원소를 unset() 하면 PHP는 배열을 조정하여 루핑이 올바르게 작동하도록합니다. 누락 된 구멍을 채우기 위해 어레이를 압축하지 않습니다. 이것은 모든 배열이 숫자로 보이는 경우에도 연관성이 있다고 말할 때 의미합니다. 다음은 그 예입니다.

// create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];  // prints 'bee'
print $animals[2];  // prints 'cat'
count($animals);    // returns 6

// unset( )
unset($animals[1]); // removes element $animals[1] = 'bee'
print $animals[1];  // prints '' and throws an E_NOTICE error
print $animals[2];  // still prints 'cat'
count($animals);    // returns 5, even though $array[5] is 'fox'

// add new element
$animals[ ] = 'gnu'; // add new element (not Unix)
print $animals[1];  // prints '', still empty
print $animals[6];  // prints 'gnu', this is where 'gnu' ended up
count($animals);    // returns 6 

// assign ''
$animals[2] = '';   // zero out value
print $animals[2];  // prints ''
count($animals);    // returns 6, count does not decrease

배열을 조밀하게 채워진 숫자 배열로 압축하려면 array_values() .

$animals = array_values($animals);

또는 array_splice() 배열을 자동으로 다시 인덱싱하여 구멍이 남지 않도록합니다.

// create a "numeric" array
    $animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
    array_splice($animals, 2, 2);
    print_r($animals);
    Array
    (
        [0] => ant
        [1] => bee
        [2] => elk
        [3] => fox
    )

이는 배열을 대기열로 사용하고 임의 액세스를 허용하면서 대기열에서 항목을 제거하려는 경우에 유용합니다. 배열에서 첫 번째 또는 마지막 요소를 안전하게 제거하려면 array_shift ()array_pop () 을 각각 사용하십시오.


$x = array(1, 2, 3, 4, 5);
var_dump($x);
unset($x[3]); // here is key to be delete
echo '<br>';
array_values($x);
var_dump($x);


  // our initial array  
   $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");  
  print_r($arr);

  // remove the elements who's values are yellow or red  
   $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);  

위 코드의 결과입니다.

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

이제 array_values ​​()는 숫자 배열을 멋지게 다시 색인하지만 배열에서 모든 키 문자열을 제거하고 숫자로 바꿉니다. 키 이름 (문자열)을 유지해야하거나 모든 키가 숫자 인 경우 배열을 다시 색인하려면 array_merge ()를 사용하십시오.

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

산출물

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)

$key = array_search($needle,$array);
if($key!==false){
    unset($array[$key]);
}

<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

산출:

Array
(
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
)

fruit1

<?php 
//If you want to remove a particular array element use this method
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");

print_r($my_array);
if(array_key_exists("key1",$my_array)){  
unset($my_array['key1']);
print_r($my_array);
}else{
echo "Key does not exist";
}
?>

<?php 
//To remove first array element
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array=array_slice($my_array,1); 
print_r($new_array);
?>


<?php 
echo "<br/> ";
//To remove first array element to length
//starts from first and remove two element 
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array=array_slice($my_array,1,2); 
print_r($new_array);
?>

산출

 Array ( [key1] => value 1 [key2] => value 2 [key3] => 
 value 3 ) Array (    [key2] => value 2 [key3] => value 3 ) 
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 ) 
 Array ( [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 ) 
 Array ( [key2] => value 2 [key3] => value 3 ) 

// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}




arrays