【问题标题】:PHP: Determining A Parameter Type [duplicate]PHP:确定参数类型
【发布时间】:2013-01-02 07:59:07
【问题描述】:

可能重复:
PHP Arrays: A good way to check if an array is associative or numeric?

我的一个函数的一个参数取以下类型的值:

null,

'*','',

array('domain1','domain2'),

array('domain1'=>'*','domain2'=>'group1','domain3'=>array('group1','group2')),

我在尝试确定参数的类型时遇到问题。特别是在确定它是否是一个数组及其关键参数时。

基本如何确定参数类型?

【问题讨论】:

  • is_null()、is_array() 等
  • @MarcB - 这不会告诉你它是否是一个关联数组。
  • @MarcB - 这不会帮助他区分数组 1 和数组 2,这是他主要关心的问题。
  • 单独创建这个问题所花费的时间肯定比谷歌搜索“php get type”和感觉幸运的时间多 5 倍。
  • @joseph:在 PHP 中将任意数据/类型作为参数传递意味着自己做更多的工作。 stackoverflow.com/questions/173400/…

标签: php arrays parameters


【解决方案1】:

您可以使用is_array 函数来确定参数是否为数组。能否将您的代码提供给我们以提供更多详细信息?

【讨论】:

    【解决方案2】:

    PHP gettype 函数应该做你想做的事。要检查特定类型,您可以使用 is_* 函数,例如 is_array。你可以找到他们的信息here

    【讨论】:

      【解决方案3】:

      Php 有很多功能。

      Here 是其中大部分(如果不是全部)的搜索。

      您将主要使用以is 开头的函数(is_array()is_null()isset()

      【讨论】:

        【解决方案4】:

        如果您想要一种简单的方法来确定类型,您可能根本不想使用数组。您可能会发现将数据填充到特定类的对象中会更有用。

        然后您可以使用instanceofis_a() 测试对象类型。

        使用对象还可以让您为数据结构提供额外的功能。通过将其设为迭代器,它仍然可以被视为一个数组(例如 foreach() 等)。

        如果您更喜欢使用数组,并且想要区分键控数组和数字数组,您可以查看this question 的答案。

        最好的答案是一个简短的函数,如下所示:

        function array_isassoc(array $array) {
            return array_keys($array) !== range(0,count($array)-1);
        }
        

        这将返回 true 用于键控数组或 false 用于数字数组。

        这可能是您可以使用的最可靠的方法,尽管如果您有一个数字数组并从中删除元素而不重新编号键,它将停止工作。

        【讨论】:

        • array_isassoc() 函数不适用于具有非连续键的枚举数组 - 如果序列中有任何间隙,它将失败
        • @MarkBaker - 我们为什么要重新开始这个对话?去 bash the original answer,并将这个问题标记为重复。哦,当你在那里时,你可以投票the correct answer
        • @JosephSilber - 公平地说,我确实声明我的首选解决方案根本不是使用数组,而是使用适当考虑的类结构。这不是另一个问题的答案,因为另一个问题更直接地说明了它的要求。为了完整起见,我只添加了答案的 isassoc 部分,这样做时我确实参考了上一个问题。 (说了这么多,我的猜测是 OP 将采用这种类型的解决方案,而不是重做所有事情来使用对象;如果他所拥有的东西几乎可以工作,这可能是一个更务实的选择)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多