如何从 PHP 数组中取消设置数字索引元素?
Posted
技术标签:
【中文标题】如何从 PHP 数组中取消设置数字索引元素?【英文标题】:How to unset numeric index elements from a PHP array? 【发布时间】:2018-10-03 05:15:47 【问题描述】:我有一个数组集合,它包含数字索引和非数字索引。我想取消设置所有数字索引。
我的数组是这样的。
Array
(
[554] => Array
(
[0] => 554
[1] => Jiaqi Zheng
[2] => Female
[3] => 28
[4] => Table Tennis
[5] =>
[6] =>
[7] =>
[8] =>
[rank] => 554
[athlet_name] => Jiaqi Zheng
[gender] => Female
[sport] => Table Tennis
)
[555] => Array
(
[0] => 555
[1] => Zach Ziemek
[2] => Male
[3] => 23
[4] => Athletics
[5] =>
[6] =>
[7] =>
[8] =>
[rank] => 555
[athlet_name] => Zach Ziemek
[gender] => Male
[sport] => Athletics
)
)
这里我必须取消所有数字索引。
我像这样使用 unset 并且它对我来说工作正常。
unset(
$history_years_wise_country_wise_details_arr[ $history_years_wise_country_wise_details_info[0]][0],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][1],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][2],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][3],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][4],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][5],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][6],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][7],
$history_years_wise_country_wise_details_arr[$history_years_wise_country_wise_details_info[0]][8]
);
有什么办法可以减少代码行数?这里 0 到 8 是一个系列。
我可以在一行代码中取消设置所有索引,因为它们都是数字吗?
可以用正则表达式代替吗?
我想要类似的东西
unset(
$history_years_wise_country_wise_details_arr[ $history_years_wise_country_wise_details_info[0]][anything_which_will_take_index_from_0_to_8]);
有什么建议吗?
谢谢
【问题讨论】:
【参考方案1】:您可以使用array_filter()
和is_string()
函数作为其回调函数:
$array = array_filter($array, 'is_string', ARRAY_FILTER_USE_KEY);
【讨论】:
我得到这样的结果。数组 ( [] => 数组 ( [rank] => [athlet_name] => [gender] => [sport] => ) ) 我试过你的代码。 $数组 = 数组(); foreach($history_years_wise_country_wise_details_arr as $key2=> $hywcwda) $array[] = array_filter($hywcwda, 'is_string', ARRAY_FILTER_USE_KEY); echo '';print_r($array);exit;【参考方案2】:
使用循环。
foreach ($array as $key => $value)
if (is_numeric ($key))
unset($array [$key]);
或使用array_filter
$filtered = array_filter(
$array,
function ($key)
return !is_numeric($key);
,
ARRAY_FILTER_USE_KEY
);
【讨论】:
Array ( [] => Array ( [rank] => [athlet_name] => [gender] => [sport] => ) ) 我认为它删除了所有主要键。 循环遍历主数组并过滤子元素。 revo 的答案更好。【参考方案3】:你应该使用 foreach
循环和 is_numeric
类似的函数
foreach ($your_array as $key => $value)
if (!is_numeric($key))
unset($arr[$key]);
我认为不需要任何正则表达式
【讨论】:
再次我必须使用循环,还有其他方法吗? ,在相同的代码中我猜我做不到【参考方案4】:由于您在array
内有array
,首先您需要使用array_map()
,然后使用array_filter()
遍历数组,
考虑将$array
作为您的array
:
$resultData = array_map([$this, 'allData'], $array);
public function allData($data)
$numericKeys = array_filter(array_keys($data), function ($k)
return is_int($k);
);
// Updated Code
$arrayKeys = array_diff(array_keys($data),$numericKeys);
return array_intersect_key($data,array_flip($arrayKeys));
【讨论】:
[554] => 数组([9] => rank [10] => athlet_name [11] => 性别 [12] => 运动)[555] => 数组([9] => rank [10] => athlet_name [11] => gender [12] => sport ) 删除了数字索引,但数据出错了。 我得到了值。 [554] => 阵([0] => 554 [1] => 郑嘉琪[2] => 女[3] => 乒乓球)[555] => 阵([0] => 555 [1] => Zach Ziemek [2] => 男 [3] => 田径)我改变了 return array_diff(array_keys($data),$numericKeys);返回 array_diff(array_values($data),$numericKeys); 我只想要关联数组。在这里我得到数字索引以上是关于如何从 PHP 数组中取消设置数字索引元素?的主要内容,如果未能解决你的问题,请参考以下文章