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' );
您的问题的解决方案是重构您的代码:
- 不要将同一个变量用于不同的目的
- 不要把所有东西都塞进数组
如果我正确理解你的“跨度”数据结构,它类似于 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;
}
}
$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' );
您的问题的解决方案是重构您的代码:
- 不要将同一个变量用于不同的目的
- 不要把所有东西都塞进数组
如果我正确理解你的“跨度”数据结构,它类似于 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;
}
}