72700
# やりたいこと

配列の値を変更せずに、配列のキーだけ反対にしたいです。

# 例

```

    <?php
    $first = [1,3,5];
    print_r($first);
    
```

この結果は

```

    Array
    (
        [0] => 1
        [1] => 3
        [2] => 5
    )
    
```

となるのですが、その結果をキーだけ入れ替えて

```

    Array
    (
        [2] => 1
        [1] => 3
        [0] => 5
    )
    
```

としたいと考えています。

# 調べたこと

「php 配列、キーだけ入れ替え」で調べたところ `array_reverse`
という関数を見つけましたが、こちらはキーと値を全て入れ替えてしまうので今回自分がやりたいことではありませんでした。  
この問題を解決するのに何かアドバイスがあればよろしくお願いします。
CC BY-SA 4.0
2020-12-17T01:32:56.567
72697
2020-12-17T04:24:36.217
2020-12-17T04:18:29.793
36424
36424
question
php
PHP で配列のキーだけ反対にしたい
array_reverseはすべて入れ替えていますが、順番が違うだけなのでarray_reverseの結果を降順すればよいと思います。

keyを降順に並べるには[krsort](https://www.php.net/manual/ja/function.krsort.php)を使ってみてください

```

    <?php
    $first = [1,3,5];
    print_r($first);
    
    $reverse = array_reverse($first);
    krsort($reverse);
    print_r($reverse);
    
```
CC BY-SA 4.0
2020-12-17T01:49:09.750
72700
2020-12-17T01:49:09.750
22665
72697
answer
こんな感じでしょうか？

```

    $first = [1,3,5];
    print_r($first);
    $reverse = [];
    $keys = array_keys($first);
    $keys = array_reverse($keys);
    $count = 0;
    foreach($first as $value){
      $reverse[$keys[$count]] = $value;
      $count++;
    }
    print_r($reverse);
    
```

```

    Array
    (
        [0] => 1
        [1] => 3
        [2] => 5
    )
    Array
    (
        [2] => 1
        [1] => 3
        [0] => 5
    )
    
```

キーだけの配列にして、その配列の順番を逆にして、それから元の値を入れます。

このやり方だと、連想配列でも大丈夫です。連想配列じゃない場合はkeitaro_soの答えの方が短くていいと思います。

つまり、こちらのやり方だとこういう配列でも平気です

```

    Array
    (
        [orange] => 1
        [apple] => 3
        [pear] => 5
    )
    Array
    (
        [pear] => 1
        [apple] => 3
        [orange] => 5
    )
    
```
CC BY-SA 4.0
2020-12-17T02:27:51.000
72701
2020-12-17T02:34:18.883
2020-12-17T02:34:18.883
18980
18980
72697
answer