PHP数组-删除键以开头的元素
新手问题-我正在尝试删除带有以“not__;”开头的键的元素。 它的内部laravel项目,所以我可以使用它的数组函数。 我正在尝试删除循环后的元素。这不会删除任何内容,即它不起作用:PHP数组-删除键以开头的元素,php,arrays,Php,Arrays,新手问题-我正在尝试删除带有以“not__;”开头的键的元素。 它的内部laravel项目,所以我可以使用它的数组函数。 我正在尝试删除循环后的元素。这不会删除任何内容,即它不起作用: function fixinput($arrinput) { $keystoremove = array(); foreach ($arrinput as $key => $value); { if (starts_with($key, 'not__'))
function fixinput($arrinput)
{
$keystoremove = array();
foreach ($arrinput as $key => $value);
{
if (starts_with($key, 'not__'))
{
$keystoremove = array_add($keystoremove, '', $key);
}
}
$arrinput = array_except($arrinput, $keystoremove);
return $arrinput;
}
请注意,它不是阵列上的唯一任务。我自己试试看。:)
谢谢 试试这个
$filtered = array();
foreach ($array as $key => $value) {
if (strpos($key, 'not__') !== 0) {
$filtered[$key] = $value;
}
}
function fixinput($arrinput)
{
$keystoremove = array();
foreach ($arrinput as $key => $value);
{
if (preg_match("@^not__@",$key))
{
$keystoremove = array_add($keystoremove, '', $key);
}
}
$arrinput = array_except($arrinput, $keystoremove);
return $arrinput;
}
一些PHP正则表达式:
$array = array('not__foo' => 'some_data', 'bar' => 'some_data', 12 => 'some_data', 15 => 'some_data', 'not__taz' => 'some_data', 'hello' => 'some_data', 'not__world' => 'some_data', 'yeah' => 'some_data'); // Some data
$keys = array_keys($array); // Get the keys
$filter = preg_grep('#^not__#', $keys); // Get the keys starting with not__
$output = array_diff_key($array, array_flip($filter)); // Filter it
print_r($output); // Output
输出
Array
(
[bar] => some_data
[12] => some_data
[15] => some_data
[hello] => some_data
[yeah] => some_data
)
使用带有ARRAY\u FILTER\u USE\u KEY
标志的函数似乎是最佳/最快的选项
$arrinput = array_filter( $arrinput, function($key){
return strpos($key, 'not__') !== 0;
}, ARRAY_FILTER_USE_KEY );
标志参数直到版本5.6.0才添加,因此对于较早版本的PHP,for循环可能是最快的选择
foreach ($arrinput as $key => $value) {
if(strpos($key, 'not__') === 0) {
unset($arrinput[$key]);
}
}
我认为下面的方法要慢得多,但这只是一种不同的方法
$allowed_keys = array_filter( array_keys( $arrinput ), function($key){
return strpos($key, 'not__') !== 0;
} );
$arrinput = array_intersect_key($arrinput , array_flip( $allowed_keys ));
作用
if(!function_exists('array_remove_keys_beginning_with')){
function array_remove_keys_beginning_with( $array, $str ) {
if(defined('ARRAY_FILTER_USE_KEY')){
return array_filter( $array, function($key) use ($str) {
return strpos($key, $str) !== 0;
}, ARRAY_FILTER_USE_KEY );
}
foreach ($array as $key => $value) {
if(strpos($key, $str) === 0) {
unset($array[ $key ]);
}
}
return $array;
}
}
实际问题是什么?代码不起作用,这只是我的尝试。
我试图删除以“not___;开头的键的元素。
我想取消设置元素会更好。谢谢,但我也应该添加代码,我不知道哪里(没有循环)@my2c是php的函数。他们将在内部循环你的数组。我还有几行,正在检查相关字段。。。$fieldkey=substr($key,4);再次感谢!它没有删除“not___;”字段。看起来array_add做的数组不对,应该是$keystemove=array('not_public'、'not_locked');我用的是deceze的溶液。谢谢大家!