Как отключить числовые элементы индекса из массива PHP?

У меня есть массив массива, который содержит как числовой индекс, так и не numeric. Я хочу отключить все числовые индексы.

Мой массив выглядит примерно так.

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( $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] ); с 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]); с 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]); 

Какие-либо предложения?

Спасибо

Всего 4 ответа


Вы можете использовать array_filter() с is_string() качестве функции обратного вызова:

$array = array_filter($array, 'is_string', ARRAY_FILTER_USE_KEY);

Используйте цикл.

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

Вы использовали цикл foreach с is_numeric например

foreach ($your_array as $key => $value) {
    if (!is_numeric($key)) {
        unset($arr[$key]);
    }
}

я думаю, что нет необходимости в регулярном выражении


Поскольку у вас есть 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));
 }

Есть идеи?

10000