如何扫描 php 中的嵌套数组?
How to scan nested arrays in php?
我想知道如何完全循环遍历数组(如使用 foreach)以重新排列数据。但是,这个数组包含数组,那些数组包含数组等。例如:
$data= array(
'key1' => array(
'key2' => 'value2',
'key3' => 'value3'
),
'key4' => array(
'key5' => 'value5',
'key6' => 'value6'
)
)
在这个例子中,我知道我可以只使用两个 foreach 来循环它并执行我需要重新排列数据的操作,但在我的例子中,我不知道有多少数组嵌套在 $data
因为我没有做到,而且它太大了,我无法只看一眼就数一数。
你可以在一个函数中编写你的循环,如果有任何子元素是一个数组,你可以调用这个函数,就像这样:
function checkArray($array, $value){
foreach($array as $entry){
if(is_array($entry)){
checkArray($entry, $value);
} else {
// Do your check and logic here.
}
}
}
$example = array( 'key' => array( 'key1' => 'value1', 'key2' => 'value2'), 'key4' => 'value4');
checkArray($example, 'value4');
您可以对 "scan" 数组使用 array_walk_recursive() 函数。此函数将递归到更深的数组中。您将取回数组的每个成员。
$arr = [[["element1", "element2", ["element3"]]],["element4"]];
array_walk_recursive($arr, 'test_print');
function test_print($item, $key)
{
echo "$key holds $item\n";
}
有很多可能性。
你可以使用递归:
function scan($array) {
foreach ($array as $item) {
if (is_array($item) {
scan($item);
// ...
}
// ...
}
}
或者如果你想避免递归,你可以在循环中转换递归
function scan($array) {
$stack = [$array];
do {
foreach (array_shift($stack) as $item) {
if (is_array($item) {
$stack[] = $item;
}
// ...
}
} while (count($stack) > 0);
}
或不同的东西 - 取决于您的需要
我想知道如何完全循环遍历数组(如使用 foreach)以重新排列数据。但是,这个数组包含数组,那些数组包含数组等。例如:
$data= array(
'key1' => array(
'key2' => 'value2',
'key3' => 'value3'
),
'key4' => array(
'key5' => 'value5',
'key6' => 'value6'
)
)
在这个例子中,我知道我可以只使用两个 foreach 来循环它并执行我需要重新排列数据的操作,但在我的例子中,我不知道有多少数组嵌套在 $data
因为我没有做到,而且它太大了,我无法只看一眼就数一数。
你可以在一个函数中编写你的循环,如果有任何子元素是一个数组,你可以调用这个函数,就像这样:
function checkArray($array, $value){
foreach($array as $entry){
if(is_array($entry)){
checkArray($entry, $value);
} else {
// Do your check and logic here.
}
}
}
$example = array( 'key' => array( 'key1' => 'value1', 'key2' => 'value2'), 'key4' => 'value4');
checkArray($example, 'value4');
您可以对 "scan" 数组使用 array_walk_recursive() 函数。此函数将递归到更深的数组中。您将取回数组的每个成员。
$arr = [[["element1", "element2", ["element3"]]],["element4"]];
array_walk_recursive($arr, 'test_print');
function test_print($item, $key)
{
echo "$key holds $item\n";
}
有很多可能性。
你可以使用递归:
function scan($array) {
foreach ($array as $item) {
if (is_array($item) {
scan($item);
// ...
}
// ...
}
}
或者如果你想避免递归,你可以在循环中转换递归
function scan($array) {
$stack = [$array];
do {
foreach (array_shift($stack) as $item) {
if (is_array($item) {
$stack[] = $item;
}
// ...
}
} while (count($stack) > 0);
}
或不同的东西 - 取决于您的需要