我需要从PHP数组中获取每个键值对。结构不同,不可规划,例如,键可能包含额外的数组等等(多维数组?)。我要调用的函数具有从值替换特定字符串的任务。问题是函数foreach
,each
,.只使用主键和值。
是否存在一个具有foreach
-function和每个键/值的函数?
发布于 2016-12-24 13:12:14
这类任务的通常方法是使用递归。
让我们一步一步地走:
首先您需要foreach
控制语句..。
http://php.net/manual/en/control-structures.foreach.php
..that允许您在不事先知道键名的情况下解析关联数组。
然后是is_array
和is_string
(最后是is_object
,is_integer
.)让您检查每个值的类型,这样您就可以正确地操作。
http://php.net/manual/en/function.is-array.php
http://php.net/manual/en/function.is-string.php
如果找到要操作的字符串,则执行替换任务
如果您找到一个数组,该函数会回忆自己传递刚才解析的数组。
通过这种方式将原始数组解析到最深的级别,而不会丢失和键值对.。
示例:
function findAndReplaceStringInArray( $theArray )
{
foreach ( $theArray as $key => $value)
{
if( is_string( $theArray[ $key ] )
{
// the value is a string
// do your job...
// Example:
// Replace 'John' with 'Mike' if the `key` is 'name'
if( $key == 'name' && $theArray[ $key ] == "John" )
{
$theArray[ $key ] = "Mike";
}
}
else if( is_array( $theArray[ $key ] )
{
// treat the value as a nested array
$nestedArray = $theArray[ $key ];
findAndReplaceStringInArray( $nestedArray );
}
}
}
发布于 2016-12-24 13:27:29
没有一个内置的函数可以像您所期望的那样工作,但是您可以使用RecursiveIteratorIterator来调整它,递归地遍历多维数组,并且使用标志RecursiveIteratorIterator::SELF_FIRST
,您将首先获得相同级别的所有元素,然后再深入,不会丢失任何对。
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $key => $item) {
// LOGIC
}
发布于 2016-12-24 13:13:59
您可以创建一个递归函数来处理它。
function sweep_array(array $array)
{
foreach($array as $key => $value){
if(is_array($value))
{
sweep_array($value);
}
else
{
echo $key . " => " . $value . "<br>";
}
}
}
https://stackoverflow.com/questions/41313495
复制相似问题