仅知道键的数字顺序时如何取消设置
How to unset when only knowing a key's numerical order
我想从数组中取消设置,但我只知道每个键的数字顺序。
删除它们的最佳方法是什么?
$arr = [
'horse' => true,
'rabbit' => false,
'cat' => true,
'dog' => false,
'sheep' => false,
];
$remove = [0,1,3];
想要的结果:
$arr = [
'cat' => true,
'sheep' => false,
];
你可以这样做,
$counter = 0;
foreach($arr as $key => $value){
if(in_array($counter, $remove)){
unset($arr[$key]);
}
++$counter;
}
// display $arr array
var_dump($arr);
使用array_keys
获取实际的键,然后使用索引获取对应的键。
$arr_keys = array_keys($arr);
foreach ($remove as $r) {
unset($arr[$arr_keys[$r]]);
}
您需要使用 array_keys
(http://php.net/manual/en/function.array-keys.php)。
<?php
$arr = [
'horse' => true,
'rabbit' => false,
'cat' => true,
'dog' => false,
'sheep' => false,
];
$keys = array_keys($arr);
$remove = [0,1,3];
foreach($remove as $key) {
unset($arr[$keys[$key]]);
}
var_dump($arr);
这是一个有趣的方法:
$arr = array_intersect_key($arr,
array_flip(array_diff_key(array_keys($arr),
array_flip($remove))));
- 翻转删除数组以获取值作为键
- 获取这些键与主数组的整数键之间的差异
- 翻转它并获取与主数组相交的键的值
这里更有趣:
$arr = array_filter($arr, function($v) use($remove) {
static $k = 0; return !in_array($k++, $remove);
});
- 使用从 0 开始递增计数器的函数过滤数组
- Return
true
如果计数器不在删除数组中 !
并且 false
如果它是
我想从数组中取消设置,但我只知道每个键的数字顺序。
删除它们的最佳方法是什么?
$arr = [
'horse' => true,
'rabbit' => false,
'cat' => true,
'dog' => false,
'sheep' => false,
];
$remove = [0,1,3];
想要的结果:
$arr = [
'cat' => true,
'sheep' => false,
];
你可以这样做,
$counter = 0;
foreach($arr as $key => $value){
if(in_array($counter, $remove)){
unset($arr[$key]);
}
++$counter;
}
// display $arr array
var_dump($arr);
使用array_keys
获取实际的键,然后使用索引获取对应的键。
$arr_keys = array_keys($arr);
foreach ($remove as $r) {
unset($arr[$arr_keys[$r]]);
}
您需要使用 array_keys
(http://php.net/manual/en/function.array-keys.php)。
<?php
$arr = [
'horse' => true,
'rabbit' => false,
'cat' => true,
'dog' => false,
'sheep' => false,
];
$keys = array_keys($arr);
$remove = [0,1,3];
foreach($remove as $key) {
unset($arr[$keys[$key]]);
}
var_dump($arr);
这是一个有趣的方法:
$arr = array_intersect_key($arr,
array_flip(array_diff_key(array_keys($arr),
array_flip($remove))));
- 翻转删除数组以获取值作为键
- 获取这些键与主数组的整数键之间的差异
- 翻转它并获取与主数组相交的键的值
这里更有趣:
$arr = array_filter($arr, function($v) use($remove) {
static $k = 0; return !in_array($k++, $remove);
});
- 使用从 0 开始递增计数器的函数过滤数组
- Return
true
如果计数器不在删除数组中!
并且false
如果它是