通过数组PHP中的数组进行迭代

str*_*ade 1 php arrays for-loop

我怎么能这个数组呢

array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(14) {
      [0]=>
      string(17) "ratosk8@censored"
      [1]=>
      string(23) "alokkumar.censored"
      [2]=>
      string(24) "uuleticialima1@censored"
      [3]=>
      string(23) "camera.clicks@censored"
      [4]=>
      string(24) "billthailand@censored"
      [5]=>
      string(17) "v.golev@censored"
      [6]=>
      string(22) "flipe.lost@censored"
      [7]=>
      string(25) "notherdirtybird@censored"
      [8]=>
      string(21) "booktiphani@censored"
      [9]=>
      string(32) "opinion?jazzantoledo@censored"
      [10]=>
      string(25) "skateforemerica@censored"
      [11]=>
      string(28) "blockdymezmagazine@censored"
      [12]=>
      string(17) "and6451@censored"
      [13]=>
      string(22) "flipe.lost@censored"
    }
  }
  [1]=>
  array(1) {
    [0]=>
    array(14) {
      [0]=>
      string(17) "ratosk8@censored"
      [1]=>
      string(23) "alokkumar.jsr@censored"
      [2]=>
      string(24) "uuleticialima1@censored.com"
      [3]=>
      string(23) "camera.clicks@censored.com"
      [4]=>
      string(24) "billthailand@censored.com"
      [5]=>
      string(17) "v.golev@censored.com"
      [6]=>
      string(22) "flipe.lost@censored.com"
      [7]=>
      string(25) "notherdirtybird@censored.com"
      [8]=>
      string(21) "booktiphani@censored.com"
      [9]=>
      string(32) "opinion?jazzantoledo@censored.com"
      [10]=>
      string(25) "skateforemerica@censored.com"
      [11]=>
      string(28) "blockdymezmagazine@censored.com"
      [12]=>
      string(17) "and6451@censored.com"
      [13]=>
      string(22) "flipe.lost@censored.com"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Gum*_*mbo 7

你可以foreach在另一个内部使用foreach:

foreach ($array as $item) {
    foreach ($item[0] as $email) {
        // …
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我使用$item[0]的不仅仅是$item.

您还可以使用函数来展平该多维数组,然后使用单个数据来创建它foreach:

function array_flatten($array) {
    if (!is_array($array)) {
        return false;
    }
    $result = array();
    $stack = $array;
    $len = count($stack);
    while ($len) {
        $val = array_shift($stack);
        --$len;
        if (is_array($val)) {
            foreach ($val as $key => $val) {
                if (is_array($val)) {
                    array_unshift($stack, $val);
                    ++$len;
                } else {
                    $result[] = $val;
                }
            }
        } else {
            $result[] = $val;
        }
    }
    return $result;
}
Run Code Online (Sandbox Code Playgroud)

  • @danieltalsky:注意我使用了`$ item [0]`. (3认同)

dav*_*nal 5

我会创建一个函数并将其传递给 array_walk_recursive

function spam_someone($value, $key)
{
    $email=$value;
    send_evil_spam($email);
 }

 array_walk_recursive($people_to_spam, 'spam_someone');
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用a RecursiveIteratorIterator按顺序迭代RecursiveArrayIterator.他们的文档很少,但我相信代码看起来像这样:

//iterate over the array using recursion as in les' answer (doesn't gain much)
$array_iter=new RecursiveArrayIterator($people_to_spam);

//Ahh, here we go, this will let us iterate over the leaves in a sequential manner
$iter_iter=new RecursiveIteratorIterator($array_iter);
foreach($iter_iter as $email)
{
    send_evil_spam($email)
}
Run Code Online (Sandbox Code Playgroud)

我发现这两个解决方案是最干净,最易读的.如果数组只有3级深度,我可能只是硬编码.如果我不知道其中任何一个,我会写自己的递归函数来做它(如les'的回答).