提问者:小点点

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


在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中,我想在方法中使用array中的所有项。

然而,当我在循环中回显$item时,我得到了如下内容:

Array ( ) 

Array ( [0] => 16534 ) 

Array ( ) 

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

Array ( ) 

Array ( [0] => 14869 ) 

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

你能帮个忙吗?


共2个答案

匿名用户

这就是为什么在打印结果集时要得到一个数组的原因(因为这些值存储在子数组中,而不是循环它们)

为了删除具有空值的子数组,我将使用isset(),这样您将只获得值。

把你的代码改成这样。

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

匿名用户

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

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)