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条)

报告相同问题?