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)
你可以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)
我会创建一个函数并将其传递给 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'的回答).