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 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错