【问题标题】:Is this a PHP associative array?这是一个 PHP 关联数组吗?
【发布时间】:2014-01-21 15:09:18
【问题描述】:

我在 tutplus 上关注 this tutorial,发现了这个代码 sn-p:

//check if the action exists in the controller. if not, throw an exception.
   if( method_exists($controller, $action) === false ) {
      throw new Exception('Action is invalid.');
   }

   //execute the action
   $result['data'] = $controller->$action();
   $result['success'] = true;

} catch( Exception $e ) {
   //catch any exceptions and report the problem
   $result = array();
   $result['success'] = false;
   $result['errormsg'] = $e->getMessage();
}

//echo the result of the API call
echo json_encode($result);
exit(); 

我是 PHP 初学者,我想知道 result 是否是关联数组?有人可以确认一下吗?如何区分关联数组和非关联数组?

【问题讨论】:

  • 是的。因为您为数组中的每个元素提供了一个键名。
  • 它是一个关联数组。它将键:“sucess”、“errormsg”与值相关联。
  • 传统的索引数组使用零基值而不是键值对。

标签: php arrays


【解决方案1】:

要检查关联数组与否,可以使用这个函数

    function is_assoc($var)
    {
            return is_array($var) && array_diff_key($var,array_keys(array_keys($var)));
    }

    function test($var)
    {
            echo is_assoc($var) ? "I'm an assoc array.\n" : "I'm not an assoc array.\n";
    }

    // an assoc array
    $a = array("a"=>"aaa","b"=>1,"c"=>true);
    test($a);

【讨论】:

  • 这是让初学者开始更多自学的好方法,因为他们开始想知道这些函数的作用。
  • 是的。很好,你从不同的角度进来。
【解决方案2】:

$result 是一个关联数组,因为您分配了一个键名。

“普通”数组没有键名。

【讨论】:

    【解决方案3】:

    另一种选择。

    function is_assoc(array $arr):bool{
        $keys= array_keys($arr);
        return count(array_flip(array_map(function ($item) {
                return (int)(is_string($item) && !preg_match('/^-?\d+$/', $item)   );
            },$keys))) === 1 && is_string($keys[0]) && !preg_match('/^-?\d+$/', $keys[0]);
    }
    

    测试

    $arr=['a'=>1,'b'=>2];
    $arr2=['a'=>1,'1'=>2];
    $arr3=['1'=>1,'a'=>2];
    $arr4=['1'=>1,'2'=>2];
    var_dump(is_assoc($arr));
    var_dump(is_assoc($arr2));
    var_dump(is_assoc($arr3));
    var_dump(is_assoc($arr4));
    

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 2012-12-11
      • 2012-06-10
      • 2019-04-05
      • 2012-12-20
      相关资源
      最近更新 更多