duananyantan04633 2016-08-10 17:52
浏览 51
已采纳

为什么这个数组计数返回1而不是2?

Why is this array count returning 1 instead of 2?

Shouldn't it return 2?

$join = [
   'JOIN' => ['coins','users.id','user_id'],
   'JOIN' => ['coins','users.id','user_id']
];

echo count($join);
  • 写回答

4条回答 默认 最新

  • doulian7252 2016-08-10 17:58
    关注

    You are creating an associative array, which means that each element is associated to one unique key. Therefore, in an array, each key can only appear once. A key appearing twice means that the value will be overwritten.

    If you try to var_dump your array, it would have this output:

    array(1) {
      ["JOIN"]=>
      array(3) {
        [0]=>
        string(5) "coins"
        [1]=>
        string(8) "users.id"
        [2]=>
        string(7) "user_id"
      }
    }
    

    As seen from this result, only one line exists.

    If you need to have 'JOIN' in every element, maybe you want to change your array structure into this:

    $join = [
       ['JOIN' => ['coins','users.id','user_id']],
       ['JOIN' => ['coins','users.id','user_id']]
    ];
    

    This will carry the information 'JOIN' in every element. However, I cannot imagine why you would need such a thing.

    Instead, maybe you want to have multiple elements under the 'JOIN key:

    $join = [
        'JOIN' => [
            ['coins','users.id','user_id'],
            ['coins','users.id','user_id']
        ]
    ];
    

    As per your comments, maybe you eventually want to have a structure like this:

    $join = [
        'JOIN' => [
            ['coins','users.id','user_id'],
            ['coins','users.id','user_id'],
        ],
        'INNER JOIN' => [
            ['coins','users.id','user_id'],
            ['coins','users.id','user_id'],
        ]
    ];
    

    According to your comments, it might be more desirable if you do this through object-oriented programming instead:

    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;
    }
    

    Then you can use it like this:

    $joins = [];
    
    $join = new Join();
    $join->type = Join::INNER_JOIN;
    $join->coins = "some_value";
    $join->usersDotId = "some_value";
    $join->userId = "some_value";
    $joins[] = $id;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟