連想配列で次の要素の値と比較

[code]

    $arr = ['foo' => 10, 'bar' => 11, 'bazz' => 3, 'fizz' => 8];
    
[/code]

といった連想配列で次の要素の値と比較して小さければfalseを返したいです




Here you are.  
`bool is_stairs(array $arg)`

[code]

    <?php
    function get_numeric($value)
    {
        if (!is_numeric($value)) {
            throw new InvalidArgumentException();
        }
        return $value + 0;
    }
    
    function is_stairs(array $arg)
    {
        if (!$arg) {
            return false;
        }
        $stack = array_values($arg);
        $previ = array_shift($stack);
        $previ = get_numeric($previ);
        foreach ($stack as $value) {
            $value = get_numeric($value);
            if ($value < $previ) {
                return false;
            }
            $previ = $value;
        }
        return true;
    }
    
[/code]

普通の配列にも対応してます。  
空配列では `false` が返り、1要素では `true` が返ります。  
同じ値が続いた場合でも `false` は返りません。  
値に `is_numeric` が `false` を返す要素が含まれていた場合 `InvalidArgumentException` が発行されます。  
確かめていませんが、たぶん浮動小数点数でも動作します。

[code]

    <?php
    // 空配列: bool(false)
    var_dump(is_stairs([]));
    
    // １要素: bool(true)
    var_dump(is_stairs([7]));
    
    // bool(true)
    var_dump(is_stairs([7, 42]));
    
    // 例: bool(false)
    $arr = ['foo' => 10, 'bar' => 11, 'bazz' => 3, 'fizz' => 8];
    var_dump(is_stairs($arr));
    
    // bool(true)
    $arr = ['foo' => 0, 'bar' => 1, 'bazz' => 3, 'fizz' => 8];
    var_dump(is_stairs($arr));
    
    // bool(true)
    $arr = ['foo' => 10, 'bar' => 11, 'bazz' => 13, 'fizz' => 18];
    var_dump(is_stairs($arr));
    
    // bool(true)
    $arr = ['foo' => -INF, 'bar' => -11, 'bazz' => 3, 'fizz' => 8];
    var_dump(is_stairs($arr));
    
[/code]

