为什么此数组计数返回1而不是2?
它不应该返回2吗?
$join = [
'JOIN' => ['coins','users.id','user_id'],
'JOIN' => ['coins','users.id','user_id']
];
echo count($join);
答案 0 :(得分:3)
您正在创建关联数组,这意味着每个元素都与一个唯一键相关联。因此,在数组中,每个键只能出现一次。出现两次的密钥意味着该值将被覆盖。
如果您尝试var_dump
数组,它将具有此输出:
array(1) {
["JOIN"]=>
array(3) {
[0]=>
string(5) "coins"
[1]=>
string(8) "users.id"
[2]=>
string(7) "user_id"
}
}
从这个结果可以看出,只存在一行。
如果你需要在每个元素中都有'JOIN'
,也许你想将数组结构改为:
$join = [
['JOIN' => ['coins','users.id','user_id']],
['JOIN' => ['coins','users.id','user_id']]
];
这将在每个元素中包含信息'JOIN'
。但是,我无法想象为什么你需要这样的东西。
相反,也许你想在'JOIN
键下有多个元素:
$join = [
'JOIN' => [
['coins','users.id','user_id'],
['coins','users.id','user_id']
]
];
根据您的评论,也许您最终希望拥有这样的结构:
$join = [
'JOIN' => [
['coins','users.id','user_id'],
['coins','users.id','user_id'],
],
'INNER JOIN' => [
['coins','users.id','user_id'],
['coins','users.id','user_id'],
]
];
根据您的评论,如果您通过面向对象的编程来实现这一点可能更为可取:
class Join{
const JOIN = 0;
const INNER_JOIN = 1;
// we are using constants to prevent bugs caused by typos
public $type;
public $coins;
public $usersDotId; // I don't really know what you are trying to do here
public $userId;
}
然后你可以像这样使用它:
$joins = [];
$join = new Join();
$join->type = Join::INNER_JOIN;
$join->coins = "some_value";
$join->usersDotId = "some_value";
$join->userId = "some_value";
$joins[] = $id;
答案 1 :(得分:2)
$join = [ 'JOIN' => ['coins','users.id','user_id'], 'JOIN' => ['coins','users.id','user_id'] ]; echo count($join);
如何在不更改密钥名称的情况下修改此数组以获得2个密钥?
为了不需要更改此密钥名称,请在结构上使JOIN
成为一个数值值数组:
array:
----> [Join] :
\---> [0]
\---> coins
|---> users.id
|---> user.id
这可以通过这种语法实现(为了理解而澄清):
$join = [
'JOIN' => [0] => ['coins','users.id','user_id'],
[1] => ['coins','users.id','user_id']
];
(为了方便而简化):
$join = [
'JOIN' => ['coins','users.id','user_id'],
['coins','users.id','user_id']
];
为您提供一个计数为1的$join
数组,其中包含(一个)计数为 2 的数组,每个数组包含 3 元素。
答案 2 :(得分:1)
如果没有解决评论中出现的更具体的问题,并且承认您已经接受了适用于您的目的的答案,那么这里有一个更为理论上的解释,说明为什么您不能拥有两个相同的密钥。这可能对你没用,但希望它可以帮助那些没有直观地理解这个概念的人。
无论你是否分配自己的字符串键($array = ['key' => 'value'];
),分配自己的整数键($array = [42 => 'the answer'];
),或让PHP自动分配整数键($array[] = 'something';
),键必须是独一无二的。
PHP中的数组实际上是一个有序的映射。映射是将值与键关联的类型。
大多数编程语言都有这样的东西。这种值与键的关联意味着按照定义,键必须是唯一的。如果一种语言允许你创建一个“地图”,其中多个相同的键指向不同的值,那么按键查找值是不可能的(或者至少会产生模糊的结果),因此地图将毫无用处。
PHP 将让您编写如下内容:
$example = [
'a' => 1,
'b' => 2,
'a' => 3,
];
var_dump($example);
没有给出任何错误,但结果将是:
array (size=2)
'a' => int 3
'b' => int 2
其中'a' => 3
已覆盖先前定义的'a'
键值。这允许地图继续工作,因此$example['a']
将始终产生相同的值。如果你真的可以
array (size=3)
'a' => int 1
'b' => int 2
'a' => int 3
然后$example['a']
的结果是什么?任何已定义的行为('a'
的第一个实例等)都意味着'a'
的某些值将无法访问。
答案 3 :(得分:0)
因为您对元素
使用相同的数组键试试这个,
<?php
$join = [
'JOIN1' => ['coins','users.id','user_id'],
'JOIN2' => ['coins','users.id','user_id']
];
echo count($join);
?>
或使用相同的密钥尝试以下
$join = [
['JOIN' => ['coins','users.id','user_id']],
['JOIN' => ['coins','users.id','user_id']]
];