php - 当键为“0”时如何区分关联数组和标准数组

php - How to differentiate between associative and standard array when key is '0'

$value = array( '1' );
$value = array( '0' => '1' );

这是将传递给以下函数的两种可能的数组格式。第一个用于项目列表(1、2、3 ...),第二个表示跨度(1 - 50)。使用这些值,该函数运行良好。但如果 span 数组是从 0 到 X,如上所示。

这两种数组类型的实例随处可见。这是处理它们的函数的相关部分

if ( is_array( $value ) )
{
    if ( $value[0] || $value[0] === '0' )
    {
        echo 'item array';
    }
    else
    {
        echo 'span array';
    }
}

我试过这些答案:How to check if PHP array is associative or sequential?

它也适用于上述函数,但似乎无法区分上面显示的数组。

本主题解释了大部分内容:A numeric string as array key in PHP

我无法在提供的代码中区分这两个数组吗?我没有得到什么?

链接问题的已接受答案已经回答了您的问题:

A numeric string as array key in PHP

这是重要的一句话:

If a key is the standard representation of an integer, it will be interpreted as such

也就是说

array( '1' )

等于

array( 0 => '1' ) 

等于

array( '0' => '1' );

您的问题的解决方案是重构您的代码:

  1. 不要将同一个变量用于不同的目的
  2. 不要把所有东西都塞进数组

如果我正确理解你的“跨度”数据结构,它类似于 array('0' => 1, '1' => 50) 来表示 "1-50"。那么我建议将其重构为一个简单的值对象:

class Span
{
    private $from, $to;
    public function __construct($from, $to)
    {
        $this->from = $from;
        $this->to = $to;
    }
    public static function fromArray(array $array)
    {
        return new self($array[0], $array[1]);
    }
    public function getFrom() 
    {
        return $this->from;
    }
    public function getTo() 
    {
        return $this->to;
    }
}