循环一次为什么?

时间:2015-10-01 09:03:29

标签: php foreach

假设我有以下数据。

现在我正在尝试将每个组的所有值分组到一个数组中。

假设$ temp_array包含了我拥有的所有结果。 现在我试图根据id -

对所有数据进行分组

所以我想这样做---

array(
values (
id -225
name1= hello
name2= 45
name3= burger
,
id -225
name1= bacon
name2= cheese))

所以我试过这样---

$count=count($temp_array); // $temp_array contains all results
foreach ($temp_array as $key => $var) {

    for ($j = 0; $j < count($count); ++$j) {
        $data = array();
        $data['id'] = $var[$j]['id'];
        $data['name'] = $var[$j]['name'];
        }}

但问题是它只循环一次,意味着[0]值。 所以我得到了结果---

    array(
    values (
    id -225
    name1= hello
    name2= 0
    name3= 0
    ,
    id -225
    name1= bacon
    name2= 0
...))

我的结果---

Array
(
    [0] => Array // group number 0
        (
            [0] => Array
                ([id] => 225
                [name] => hello
            )

            [1] => Array
                (
                    [id] => 225
                    name] => ham
                        )

            [2] => Array
                (
                [id] => 225
                )

            [3] => Array
                (
                    [id] => 225
                    name] => burger
                  )
    [1] => Array // group number 1
        (
            [0] => Array
                (
                    [id] => 45
                    name] => bacon
                  )
                  [1] => Array
                (
                    [id] => 45
                    name] => cheese
                        )

有人可以帮我解决这个问题吗

4 个答案:

答案 0 :(得分:4)

$ count的值是一个整数,所以你正在使用额外的count()函数

替换

for ($j = 0; $j < count($count); ++$j) {

for ($j = 0; $j < $count; ++$j) {

你也可以尝试这样:

 $data = array();
 foreach($tempArrray as $row) {
     $data[$row['id']][] = $row;
 }

答案 1 :(得分:1)

$count是一个整数。

如果您count($count),则会计算$count的字符串长度 1

对于不同的数据类型,

count()函数的工作方式不同。

如果您向其传递任何整数值,它将自动将其强制转换为字符串并计算长度。

  • 对于字符串,它会计算其中的字符数。

  • 对于数组,它会计算其中的元素数。

在你的情况下,你得到字符串长度(即1)而不是数组元素数。

更改

for ($j = 0; $j < count($count); ++$j) {

for ($j = 0; $j < $count; ++$j) {

答案 2 :(得分:-1)

作为foreach的内部,你应该将你的输出结合起来:http://php.net/manual/en/language.operators.string.php

$count=count($temp_array); // $temp_array contains all results
$data = '';
foreach ($temp_array as $key => $var) {

    for ($j = 0; $j < count($count); ++$j) {
        $data .= array();
        $data['id'] .= $var[$j]['id'];
        $data['name'] .= $var[$j]['name'];
        }}

var_dump($data);

答案 3 :(得分:-1)

您的阵列不正确。你的输出是这样的:

grunt // { env : "staging" }
grunt --env=UAT // { env : "UAT" }

我已经编辑了数组并使用您制作的代码对其进行了测试,并且运行正常。像这样构建:

Array
(
  [0] => Array // group number 0
    (
        [0] => Array
            ([id] => 225
            [name] => hello
        )

        [1] => Array
            (
                [id] => 225
                name] => ham
                    )

        [2] => Array
            (
            [id] => 225
            )

        [3] => Array
            (
                [id] => 225
                name] => burger
              ) // you need to close this array [0] with another ),
[1] => Array // group number 1
    (
        [0] => Array
            (
                [id] => 45
                name] => bacon
              )
              [1] => Array
            (
                [id] => 45
                name] => cheese

以及他们之前提到的内容

$array = Array
(
'0' => Array // group number 0
(
    '0' => Array
    ('id' => 225,
        'name' => 'hello'
    ),

    '1' => Array
    (
        'id' => 225,
        'name' => 'ham'
    ),

    '2' => Array
    (
        'id' => 225
    ),

    '3' => Array
    (
        'id' => 225,
        'name' => 'burger'
    )),
    '1' => Array // group number 1
    (
        '0' => Array
        ('id' => 222,
            'name' => 'test'
        ),

        '1' => Array
        (
            'id' => 225,
            'name' => 'ham'
        ),

        '2' => Array
        (
            'id' => 225
        )));