【问题标题】:how to count length of arrays created dynamically?如何计算动态创建的数组的长度?
【发布时间】:2014-04-19 12:34:09
【问题描述】:

我有一个数组

dump($data);
*************************************

    array(10) {
      ["12-male"] => string(1) "2"
      ["11-male"] => string(1) "2"
      ["10-female"] => string(1) "2"
      ["16-female"] => string(1) "2"
      ["9-male"] => string(1) "2"
      ["17-male"] => string(1) "4"
      ["14-male"] => string(1) "4"
      ["15-female"] => string(1) "4"
      ["13-female"] => string(1) "5"
      ["18-female"] => string(1) "6"
    }

******************************************

我正在动态地从上面的数组中获取子数组

$rooms = array();
foreach ($data as $key => $value) {
    $rooms['room'.$value][] = $key;
        $rooms['room'.$value]['count'] = sizeof($rooms['room'.$value]);
}

        dump($rooms);

******************************************

我得到了这个结果

Dump => array(4) {
  ["room2"] => array(6) {             //array size=6
    [0] => string(7) "12-male"
    ["count"] => int(6)               //count of array size=6
    [1] => string(7) "11-male"
    [2] => string(9) "10-female"
    [3] => string(9) "16-female"
    [4] => string(6) "9-male"
  }
  ["room4"] => array(4) {             //array size=4
    [0] => string(7) "17-male"
    ["count"] => int(4)               //count of array size=4
    [1] => string(7) "14-male"
    [2] => string(9) "15-female"
  }
  ["room5"] => array(2) {             //array size=2
    [0] => string(9) "13-female"
    ["count"] => int(1)               //count of array size=1 (the problem here)
  }
  ["room6"] => array(2) {             //array size=2
    [0] => string(9) "18-female"
    ["count"] => int(1)               //count of array size=1 (the problem here)
  }
}

我的问题是,计数在前 2 次迭代后正确返回,之后计数始终显示 1,无论数组的大小如何。 我也试过 count() 但结果是一样的。

【问题讨论】:

    标签: php arrays algorithm loops


    【解决方案1】:

    你可以这样做:

    $rooms = array();
    foreach ($data as $key => $value) {
        if (!isset($rooms['room'.$value])) {
             $rooms['room'.$value] = array('count' => 0);
        }
        $rooms['room'.$value][] = $key;
        $rooms['room'.$value]['count']++;
    }
    

    但您不需要将count 添加到您的数组中。

    【讨论】:

    • 如果我想将计数保持在同一个数组中怎么办?
    • @user3269869 答案是否给您预期的结果?
    • 是的,这对我帮助很大,谢谢....但是你能告诉我如何在我创建的数组中插入计数吗?
    • @user3269869 代码已经这样做了,不是吗?虽然我不建议这样做。
    【解决方案2】:

    count 这样做的原因是,从 room2 和 room4 开始,您在第一次迭代时插入了“count”,然后在随后的迭代中,“count”包含在 sizeof() 请求中。对于房间 5 和房间 6,因为它们只被迭代一次 sizeof() 只被调用一次,在 'count' 被插入数组之前,所以它不是'count' 的索引不包含在sizeof 的结果中这些项目.

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2019-02-06
      • 1970-01-01
      • 2020-03-01
      相关资源
      最近更新 更多