在关联数组中切换两个项目

leo*_*.nk 15 php arrays

例:

$arr = array(
  'apple'      => 'sweet',
  'grapefruit' => 'bitter',
  'pear'       => 'tasty',
  'banana'     => 'yellow'
);
Run Code Online (Sandbox Code Playgroud)

我想切换葡萄柚和梨的位置,所以阵列将成为

$arr = array(
  'apple'      => 'sweet',
  'pear'       => 'tasty',
  'grapefruit' => 'bitter',
  'banana'     => 'yellow'
)
Run Code Online (Sandbox Code Playgroud)

我知道要切换的元素的键和值,是否有一种简单的方法可以做到这一点?或者它需要循环+创建一个新数组?

谢谢

小智 18

比arcaneerudite的解决方案更短,更简单:

<?php
if(!function_exists('array_swap_assoc')) {
    function array_swap_assoc($key1, $key2, $array) {
        $newArray = array ();
        foreach ($array as $key => $value) {
            if ($key == $key1) {
                $newArray[$key2] = $array[$key2];
            } elseif ($key == $key2) {
                $newArray[$key1] = $array[$key1];
            } else {
                $newArray[$key] = $value;
            }
        }
        return $newArray;
    }
}

$array = $arrOrig = array(
    'fruit' => 'pear',
    'veg' => 'cucumber',
    'tuber' => 'potato',
    'meat' => 'ham'
);

$newArray = array_swap_assoc('veg', 'tuber', $array);

var_dump($array, $newArray);
?>
Run Code Online (Sandbox Code Playgroud)

经过测试,工作正常


Ove*_*Lex 0

没有简单的方法,只有一个循环或一个新的数组定义。

  • 我同意莱克斯的观点。PHP 不提供交换数组项的本机函数。您可以结合其余的数组函数和大量的耐心来编写自己的数组,但老实说,使用 foreach 循环重写完整数组是迄今为止最简单的方法。除非您处理非常大的数组,否则自定义交换函数不值得付出努力,在这种情况下,您可能应该重新设计这部分代码逻辑。 (5认同)
  • 它用于与 Drupal 表单 API 一起使用,数组的顺序决定了每个元素(字段)的打印顺序。但是,我也可以使用“#weight”属性来更改顺序,这看起来会更容易。它只是意味着迭代每个字段以设置新的权重。 (2认同)