PHP 需要递归反转数组

发布于 2024-09-30 17:03:37 字数 149 浏览 0 评论 0原文

我需要递归地反转一个具有许多级别子数组的巨大数组,并且我需要保留所有键(其中一些是 int 键,一些是字符串键),有人可以帮助我吗?也许有一个使用 array_reverse 的例子?另外,使用 array_reverse 是执行此操作的唯一/最佳方法吗?

谢谢 :)

I need to recursively reverse a HUGE array that has many levels of sub arrays, and I need to preserve all of the keys (which some are int keys, and some are string keys), can someone please help me? Perhaps an example using array_reverse somehow? Also, is using array_reverse the only/best method of doing this?

Thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦里兽 2024-10-07 17:03:37

试试这个:

function array_reverse_recursive($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val))
            $arr[$key] = array_reverse_recursive($val);
    }
    return array_reverse($arr);
}

Try this:

function array_reverse_recursive($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val))
            $arr[$key] = array_reverse_recursive($val);
    }
    return array_reverse($arr);
}
初心未许 2024-10-07 17:03:37

递归:

<?php

$a = array(1,3,5,7,9);

print_r($a);

function rev($a) {
  if (count($a) == 1)
    return $a;

  return array_merge(rev(array_slice($a, 1, count($a) - 1)), array_slice($a, 0, 1));
}

$a = rev($a);
print_r($a);

?>

输出:

Array
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 7
    [4] => 9
)
Array
(
    [0] => 9
    [1] => 7
    [2] => 5
    [3] => 3
    [4] => 1
)

Recursively:

<?php

$a = array(1,3,5,7,9);

print_r($a);

function rev($a) {
  if (count($a) == 1)
    return $a;

  return array_merge(rev(array_slice($a, 1, count($a) - 1)), array_slice($a, 0, 1));
}

$a = rev($a);
print_r($a);

?>

output:

Array
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 7
    [4] => 9
)
Array
(
    [0] => 9
    [1] => 7
    [2] => 5
    [3] => 3
    [4] => 1
)
萌能量女王 2024-10-07 17:03:37

原位反转一个巨大的 php 数组(但不是递归):

function arrayReverse(&$arr){
  if (!is_array($arr) || empty($arr)) {
    return;
  }
  $rev = array();
  while ( false !== ( $val = end($arr) ) ){
    $rev[ key($arr) ] = $val;
    unset( $arr[ key($arr) ] );
  }
  $arr = $rev;
}
//usage
$test = array(5, 'c'=>100, 10, 15, 20);
arrayReverse($test);
var_export($test);
// result: array ( 3 => 20, 2 => 15, 1 => 10, 'c' => 100, 0 => 5, )

Reversing a HUGE php array in situ (but not recursively):

function arrayReverse(&$arr){
  if (!is_array($arr) || empty($arr)) {
    return;
  }
  $rev = array();
  while ( false !== ( $val = end($arr) ) ){
    $rev[ key($arr) ] = $val;
    unset( $arr[ key($arr) ] );
  }
  $arr = $rev;
}
//usage
$test = array(5, 'c'=>100, 10, 15, 20);
arrayReverse($test);
var_export($test);
// result: array ( 3 => 20, 2 => 15, 1 => 10, 'c' => 100, 0 => 5, )
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文