从数组中删除一个元素

有一种简单的方法来从PHP数组中删除元素,例如foreach ($array)不再包含该元素?

我认为把它设置为空将做到这一点,但显然不是。

  • PHP访问父类variables
  • PHP的“安全”降价处理器?
  • PHP如果in_array()如何获得密钥?
  • 使用ajax请求下载文件
  • 未定义的索引与$ _POST
  • 如何正确安装PHPUnit和PEAR?
  • 在PHP中安全的随机数生成
  • 使用MySQL / PHP在一个字段中使用now()插入当前date/时间
  • 25 Solutions collect form web for “从数组中删除一个元素”

    有不同的方法来删除一个数组元素,其中一些比其他的更有用的一些特定的任务。

    删除一个数组元素

    如果你想删除一个数组元素,你可以使用unset()或者array_splice()

    另外,如果你有这个值,并不知道删除元素的关键,你可以使用array_search()来获得密钥。

    unset()方法

    请注意,使用unset() ,数组键不会更改/ reindex。 如果你想重新索引键,你可以在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 ) 

    unset() array_splice()相同的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()来翻转数组。 而且这里的钥匙不会改变/ reindex。

     <?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()获取特定值的所有键,然后删除所有元素。

    需要注意的是, unset()会保持索引不变,这是你使用string索引(数组作为散列表)所期望的,但是在处理整数索引数组时可能会令人惊讶:

     $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() 。 另一个select是在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) } */ 
      // 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()将很好地重新索引一个数值数组,但会从数组中删除所有的键string,并用数字replace它们。 如果您需要保留键名(string),或者如果所有键都是数字,则重新索引数组,请使用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]); } 

    如果你有一个数值索引的数组,其中所有的值都是唯一的(或者它们是非唯一的,但是你想删除一个特定值的所有实例),你可以简单地使用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()调用进行validation,sizeof()初始数组的大小是4,移除后是3。

     unset($array[$index]); 

    另外,对于一个命名元素:

    unset($array["elementName"]);

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

    输出:

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

    销毁数组中的单个元素

    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" } 

    从数组的末尾popup元素 – 返回已移除元素的值

    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 

    为了避免search,可以使用array_diff

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

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

    unset()销毁指定的variables。

    函数内的unset()的行为可能会因您尝试销毁的variablestypes而异。

    如果一个函数内的全局variablesunset() ,只有局部variables被销毁。 调用环境中的variables将保持与调用unset()之前相同的值。

     <?php function destroy_foo() { global $foo; unset($foo); } $foo = 'bar'; destroy_foo(); echo $foo; ?> 

    上面代码的答案会是

    在函数中unset()全局variables

     <?php function foo() { unset($GLOBALS['bar']); } $bar = "something"; foo(); ?> 

    关联数组

    对于关联数组,请使用unset

     $arr = array('a' => 1, 'b' => 2, 'c' => 3); unset($arr['b']); // RESULT : array('a' => 1, 'c' => 3) 

    数字数组

    对于数值数组,请使用array_splice

     $arr = array(1, 2, 3); array_splice($arr, 1, 1); // RESULT : array(0 => 1, 1 => 3) 

    注意

    对数值数组使用unset不会产生错误,但是会混淆索引:

     $arr = array(1, 2, 3); unset($arr[1]); // RESULT : array(0 => 1, 2 => 3) 

    如果您必须删除数组中的多个值,并且该数组中的条目是对象或结构化数据,则[array_filter][1]是最佳select。 那些从callback函数返回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 ) 
     /* * Remove by value */ public function removeFromArr($arr, $val) { unset($arr[array_search($val, $arr)]); return array_values($arr); } 

    遵循默认function

     i) $Array = array("test1","test2","test3","test3"); unset($Array[2]); ii) $Array = array("test1","test2","test3","test3"); array_pop($Array); iii) $Array = array("test1","test2","test3","test3"); array_splice($Array,1,2); iv) $Array = array("test1","test2","test3","test3"); array_shift($Array); 

    假设你有这样一个数组:

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

    要删除storage ,请执行:

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

    你会得到:

     Array ( [user_id] => 193 ) 
     $arr = array('orange', 'banana', 'apple', 'raspberry'); $result= array_pop($arr); print_r($result); 

    我只想说,我有一个特定的对象,它具有可变属性(这基本上是映射表,我改变了表中的列,所以对象中的属性,反映表也会有所不同

     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数组内容以反映新的属性。

    花了我一点时间来解决这个问题。 希望这可以帮助别人。

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

    根据键删除一个数组元素:

    使用如下的未unsetfunction:

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

    对于那些正在寻找ruby的hash#delete相当于php:

     <?php function array_delete(&$array, $key) { if (!isset($array[$key])) { return null; } $value = $array[$key]; unset($array[$key]); return $value; } 

    因为这是我第一次来到这里

    当从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" } 

    你可以简单地使用unset()来删除一个数组。

    请记住,数组必须在foreach函数后取消设置。