繁体   English   中英

PHP 循环遍历没有索引名称的数组

[英]PHP Loop through array with no index names

在 PHP 我有这个数组结构(有些是空的,有些不是,有些是多个项目):

        Array
    (
        [0] => Array
            (
            )
    
        [1] => Array
            (
                [0] => 16534
            )
    
        [2] => Array
            (
            )
    
        [3] => Array
            (
                [0] => 16532
                [1] => 16533
            )
    
        [4] => Array
            (
            )
    
        [5] => Array
            (
                [0] => 14869
            )
}

我想遍历这个数组,所以结果我只得到数字(全部)。

我试过这样:

   foreach ($myarray as $item) {
            echo '<pre>' . print_r($item) . '</pre>';
              //   $result[] = $this->myMethod($item);
            }

所以在 foreach 中,我想在我的方法中使用数组中的所有项目。

但是,当我在循环中回显 $item 时,我有这样的事情:

Array ( ) 

Array ( [0] => 16534 ) 

Array ( ) 

Array ( [0] => 16532 [1] => 16533 ) 

Array ( ) 

Array ( [0] => 14869 ) 

所以仍然是 arrays (也是空的),而不是数字。

你能帮忙吗?

更新:我刚刚注意到,一些 arrays 看起来像这样:

[6] => Array
        (
            [0] => Array
                (
                    [id] => 269
                    [hours] => 21.0
                )

        )

    [7] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [hours] => 12.0
                        )

                    [1] => Array
                        (
                            [id] => 7
                            [hours] => 24.0
                        )

                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [hours] => 5.0
                        )

                    [1] => Array
                        (
                            [id] => 7
                            [hours] => 0.583
                        )

                )

        )

但这里的解决方案不起作用。

这似乎有效,但现在 foreach 在 foreach 解决方案中是残酷的:

    foreach ($myarray as $item2) {
    foreach ($item2 as $key2 => $val2) {
        if (isset($val2)) {
            foreach ($val2 as $key4 => $val4) {
                echo $val4['id'].',';

            }
        }
    }
}

只需合并也将删除空的数组:

foreach(array_merge(...$myarray) as $item) {
    // echo '<pre>' . print_r($item) . '</pre>';
    $result[] = $this->myMethod($item);
}

这也将起作用并且可能更快:

$result = array_map([$this, 'myMethod'], array_merge(...$myarray));

如果您有旧的 PHP 版本,则必须使用array()而不是[]并且:

call_user_func_array('array_merge', $myarray)

你只是循环通过主数组。这就是为什么你在打印结果集时得到一个数组的原因。(因为这些值存储在子 arrays 中并且你没有循环它们。)

并且要删除带有空值的子 arrays,我将使用isset()以便您仅获得值。

将您的代码更改为此。

  foreach ($myarray as $item) {
        foreach($item as $key=>$val){
            if(isset($val){
                 $values[] = $val; 
                  //   $result[] = $this->myMethod($values);
            }
        }
     }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM