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

我认为将其设置为null可以做到,但是显然不起作用。


#1楼

如果您有一个数字索引的数组,其中所有值都是唯一的(或者它们是非唯一的,但是您希望删除特定值的所有实例),则可以简单地使用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。


#2楼

使用以下代码:

$arr = array('orange', 'banana', 'apple', 'raspberry');
$result = array_pop($arr);
print_r($result);

#3楼

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

输出:

[[0] => fruit2[1] => fruit3[2] => fruit4
]fruit1

#4楼

unset()销毁指定的变量。

函数内部的unset()行为可能会有所不同,具体取决于您要破坏的变量类型。

如果全局变量在函数内部为unset() ,则仅销毁局部变量。 调用环境中的变量将保留与调用unset()之前相同的值。

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

以上代码的答案将是bar

要在函数内部unset()全局变量:

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

#5楼

我只想说我有一个具有可变属性的特定对象(它基本上是在映射一个表,并且我正在更改表中的列,因此反映表的对象的属性也会有所不同):

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 describeprotected function clearFields($num){foreach($fields as $field) {unset($this->$field[$num]);// This did not work the line below workedunset($this->{$field}[$num]); // You have to resolve $field first using {}}}
}

$fields的全部目的仅仅是,所以我不必在代码更改时四处查看,只需查看类的开头并更改属性列表和$ fields数组内容即可新属性。


#6楼

假设您具有以下数组:

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

要删除storage ,请执行以下操作:

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

你会得到:

Array
([user_id] => 193
)

#7楼

销毁数组的单个元素

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

#8楼

另外,对于命名元素:

unset($array["elementName"]);

#9楼

遵循默认功能:

一世)

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

#10楼

如果必须删除数组中的多个值,并且该数组中的条目是对象或结构化数据,则[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']]

#11楼

关联数组

对于关联数组,请使用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)

#12楼

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

#13楼

如果需要从关联数组中删除多个元素,则可以使用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 )

#14楼

有多种删除数组元素的方法,其中某些方法对某些特定任务比其他任务更有用。

删除一个数组元素

如果只想删除一个数组元素,则可以使用\\unset()\\array_splice()

另外,如果您具有该值并且不知道要删除元素的键,则可以使用\\array_search()获取键。

\\unset()方法

请注意,当您使用\\unset() ,数组键不会更改/重新索引。 如果要重新索引键,可以在\\unset()之后使用\\array_values() \\unset() ,它将所有键转换为从0开始的数字枚举键。

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

输出量

[[0] => a[2] => c
]

\\array_splice()方法

如果使用\\array_splice()则键将自动重新索引,但是关联键不会更改,而\\array_values()会将所有键转换为数字键。

\\array_splice()需要偏移量,而不是键! 作为第二个参数。

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

输出量

[[0] => a[1] => c
]

array_splice()\\unset() array_splice()相同,它通过引用获取数组,这意味着您不想将这些函数的返回值分配回数组。

删除多个数组元素

如果要删除多个数组元素并且不想多次调用\\unset()\\array_splice() ,则可以使用函数\\array_diff()\\array_diff_key()具体取决于您是否知道值或键您要删除的元素。

\\array_diff()方法

如果知道要删除的数组元素的值,则可以使用\\array_diff() 。 与\\unset()它不会更改/重新索引数组的键。

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

输出量

[[1] => b
]

\\array_diff_key()方法

如果您知道要删除的元素的键, \\array_diff_key()使用\\array_diff_key() 。 在这里,您必须确保将键作为第二个参数中的键而不是值来传递。 否则,您必须使用\\array_flip()翻转数组。 而且这里的键不会更改/重新索引。

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

输出量

[[1] => b
]

另外,如果要使用\\unset()\\array_splice()删除具有相同值的多个元素,则可以使用\\array_keys()获取特定值的所有键,然后删除所有元素。


#15楼

unset($array[$index]);

#16楼

应该注意的是, 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)
} */

#17楼

<?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);
?><?phpecho "<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 )

#18楼

这可能有帮助...

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

#19楼

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

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

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


#20楼

根据键删除数组元素:

使用如下所示的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)*/

#21楼

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

在变量$array创建$array ,然后在“我想删除的元素”中添加“ a”。 如果要删除多个项目,则:“ a”,“ b”。


#22楼

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()稍微容易些)。

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

相反,可以在foreach循环中动态使用unset():

$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 arrayif( $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 underscoreif( strpos($v,'_')===false ) {$array2[] = $v;}
}
print_r($array2);
// Output: [ 'foo', 'baz' ]

#23楼

解决方案:

  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;

如果您取消设置元素的元素,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 a new element
$animals[ ] = 'gnu'; // Add a 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() 。


#24楼

unset不会更改索引,但是array_splice可以:

$arrayName = array('1' => 'somevalue','2' => 'somevalue1','3' => 'somevalue3',500 => 'somevalue500',);echo $arrayName['500'];//somevalue500array_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'];//somevalue500unset($arrayName[1]);print_r($arrayName);//Array ( [0] => somevalue [1] => somevalue500 )

#25楼

对于具有非整数键的关联数组:

简单来说, unset($array[$key])可以工作。

对于具有整数键的数组,如果要维护键:

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

     unset($array[2]); $array = array_values($array); 
  2. array_splice($array, 2, 1);


#26楼

有两种方法,可以通过保留索引的顺序以及不知道第一项的键名的方式删除数组的第一项。

解决方案1

// 1 is the index of the first object to get
// NULL to get everything until the end
// true to preserve keys
$array = array_slice($array, 1, null, true);

解决方案#2

// Rewinds the array's internal pointer to the first element
// and returns the value of the first array element.
$value = reset($array);
// Returns the index element of the current array position
$key = key($array);
unset($array[$key]);

对于此样本数据:

$array = array(10 => "a", 20 => "b", 30 => "c");

您必须具有以下结果:

array(2) {[20]=>string(1) "b"[30]=>string(1) "c"
}

#27楼

使用array_search获取密钥,并在未设置的情况下将其删除(如果找到):

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

#28楼

如果指定索引:

$arr = ['a', 'b', 'c'];
$index = 0;unset($arr[$index]);  // result: $arr = ['b', 'c']

如果未指定索引:

$arr = ['a', 'b', 'c'];
$index = array_search('a',$arr); // search the value to find indexunset($arr[$index]);  // result: $arr = ['b', 'c']

#29楼

$arrayName = array( '1' => 'somevalue','2' => 'somevalue1','3' => 'somevalue3',);print_r($arrayName[1]);
// somevalue
unset($arrayName[1]);print_r($arrayName);

#30楼

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

#31楼

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

从PHP中的数组中删除元素相关推荐

  1. php 从数组里删除元素,PHP从数组中删除元素的四种方法实例

    PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...

  2. C语言编程>第二十六周 ① 函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。

    例题:函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换.形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动. 例如,若a所指数组中的数据依次为:11 22 33 ...

  3. JS中去除数组中重复元素的方法

    JS中去除数组中重复元素的方法 第一种方法:使用数组中的splice方法 splice():删除元素,并向数组添加新元素,并返回被删除的元素 function f1(){var _arr=[8,5,0 ...

  4. C++与C语言中有关数组中元素排序

    C++与C语言中有关数组中元素排序 C语言中 ​ #include<stdio.h> #define n 4 int main(){ int a[n]; int i,j,temp; for ...

  5. python多维数组添加元素_numpy中三维数组中加入元素后的位置详解

    今天做数据处理时,遇到了从三维数组中批量加入二维数组的需求.其中三维数组在深度学习的特征数据处理时经常会使用到,所以读者有必要对该小知识点做到清楚了解并掌握.现对三维数组中的元素位置结合代码做详细归纳 ...

  6. JS JavaScript中去除数组中重复元素的方法

    JS JavaScript中去除数组中重复元素的方法 感觉比较好理解的3种方法,总结一下,大家共同学习 方法一: Array.prototype.method1 = function(){ var a ...

  7. 3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景|判断数组里有没有某对象,有不添加,没有则添加到数组

    3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景 一.当数组中的数据是简单类型时: 应用js中的indexof方法:存在则返回当前项索引,不存在则返回 ...

  8. PHP中获取数组中单列的值

    PHP中获取数组中单列的值如下: 利用PHP中的数组函数 array_column():返回数组中某个单列的值.(PHP 5.5+适用) 语法: array_column(array,column_k ...

  9. php数组删除重复的,从PHP中的数组中删除重复的元素

    可以使用'array_flip'函数,该函数会将值反转为索引,将键反转为值. 示例<?php $my_arr = array(45, 65, 67, 99, 81, 90, 99, 45, 68 ...

最新文章

  1. python程序移植到linux,如何使python或perl脚本可移植到Linux和Windows?
  2. 看我如何作死 | 网络延迟、网络丢包、网络中断一个都没落下过
  3. JSP XML数据处理
  4. es6 --- forEach的实现
  5. JavaScript总结(3)
  6. 最简单的Jdbc连接Oracle代码
  7. mimo-ofdm无线通信技术及matlab实现_无线通信模块有哪些?它们有什么区别?
  8. Linux环境下实现一个简单socket通信
  9. mysql in 子查询 效率慢 优化(转)
  10. 数据库中如何新增一个字段
  11. JPEG图像的可逆信息隐藏算法研究
  12. 软考中级-软件设计师 复习指南(2021年11月已通过)
  13. java 对象存储在哪里_Java对象存储位置
  14. 熟女最经典的幸福语录
  15. laravel轮播图管理api
  16. 【前端面试课程重点总结】
  17. 北邮智能车仿真培训(四)—— 仿真原理详解
  18. jQuery事件 笔记
  19. 引入超融合技术解决虚拟机性能不足问题
  20. Java面试官最爱问的垃圾回收机制,mysqlssl连接

热门文章

  1. 自定义view-波纹扩散(圆扩散)
  2. Android的进程优先级
  3. 在eclipse中导入工程后@Override报错
  4. Dart Metadata 使用
  5. fastjson查找指定键值_分布式键值存储 etcd
  6. 3、kubernetes应用快速入门190625
  7. FragmentManager中Fragment的重复创建、复用问题
  8. cookie、 sessionStorage 、localStorage之间的区别和使用
  9. 使用 IntraWeb (5) - 页面布局之 TFrame
  10. sql_INSERT DELETE