【问题标题】:How to unset numeric index elements from a PHP array?如何从 PHP 数组中取消设置数字索引元素?
【发布时间】: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]);

有什么建议吗?

谢谢

【问题讨论】:

    标签: php arrays


    【解决方案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);
    • 我只想要关联数组。在这里我得到数字索引
    猜你喜欢
    • 2016-02-09
    • 2018-07-16
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2021-05-29
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多