arrays unset数组 php删除数组指定键 - PHP:从数组中删除元素




15 Answers

应该注意的是, 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() unset()

$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)
} */
php数组删除key php取数组元素 php数组删除某个值

有没有一种简单的方法可以使用PHP从数组中删除元素,这样foreach ($array)不再包含该元素?

我认为将它设置为null会这样做,但显然它不起作用。




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



如果你有一个数字索引数组,其中所有值都是唯一的(或者它们是非唯一的,但你希望删除特定值的所有实例),你可以简单地使用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”的元素,因为可以通过sizeof()调用验证,该调用报告初始数组的大小为4,删除后的大小为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



为了避免进行搜索,可以使用array_diff

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

在这种情况下,不必搜索/使用密钥。




如果必须删除数组中的多个值,并且该数组中的条目是对象或结构化数据, [array_filter][1]是您最好的选择。 将保留那些从回调函数返回true的条目。

$array = [
    ['x'=>1,'y'=>2,'z'=>3], 
    ['x'=>2,'y'=>4,'z'=>6], 
    ['x'=>3,'y'=>6,'z'=>9]
];

$results = array_filter($array, function($value) {
    return $value['x'] > 2; 
}); //=> [['x'=>3,'y'=>6,z=>'9']]



如果需要从关联数组中删除多个元素,可以使用array_diff_key() (此处与array_flip() ):

$my_array = array(
  "key1" => "value 1",
  "key2" => "value 2",
  "key3" => "value 3",
  "key4" => "value 4",
  "key5" => "value 5",
);

$to_remove = array("key2", "key4");

$result = array_diff_key($my_array, array_flip($to_remove));

print_r($result);

输出:

Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 



我只想说我有一个特定的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数组内容以反映新属性。

我花了一点时间想出这个。 希望这可以帮助别人。




假设你有这样一个数组:

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

要删除storage ,请执行:

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

你得到:

Array
(
    [user_id] => 193
)



<?php
$array = array("your array");
$array = array_diff($array, ["element you want to delete"]);
?>

在变量$ array中创建数组,然后在我放置'要删除的元素'的位置放置类似于“a”的内容。 如果你想删除多个,那么:“a”,“b”。




解决方案:

  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()




根据键删除数组元素:

使用如下的未unset功能:

$a = array(
    'salam',
    '10',
    1
);

unset( $a[1] );

print_r( $a );

/*

Output:

Array
(
    [0] => salam
    [2] => 1
)

*/

根据值删除数组元素:

使用array_search函数获取元素键并使用上面的方式删除数组元素,如下所示:

$a = array(
    'salam',
    '10',
    1
);

$key = array_search( 10, $a );

if( $key !== false ) {
    unset( $a[ $key ] );
}

print_r( $a );

/*

Output:

Array
(
    [0] => salam
    [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_splice会改变索引

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

unset($anArray[0]);

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



有两种方法可以完成此任务

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 )

with unset()

$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);
  • 删除数组元素数组索引后不要更改

与array_splice()

 syntax - array_splice(array, index, length) array_splice($array_1,1,1); // remove 1 element from $array_1 from index 1 array_splice($array_2,3,1); // remove 1 element from $array_2 from index 3 
  • 从数组中删除元素后,重新索引所有数组元素





Related


Tags

php   arrays