我需要从PHP中的数组中获取每个键值对。结构是不同的并且不可规划,例如,密钥可能包含附加数组等(多维数组?)。我想调用的函数的任务是从值中替换特定的字符串。问题是函数foreach
,each
,...只使用主键和值。
是否存在具有foreach
功能且每个键/值的功能?
答案 0 :(得分:1)
此类任务的常用方法是使用递归功能。
让我们一步一步走:
首先,您需要foreach
控制声明...
http://php.net/manual/en/control-structures.foreach.php
..让你解析关联数组而不知道键'事先说出名字。
然后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 );
}
}
}
答案 1 :(得分:1)
没有内置函数可以按预期工作,但您可以使用RecursiveIteratorIterator进行调整,递归地遍历多维数组,并使用标记RecursiveIteratorIterator::SELF_FIRST
,您将获得所有元素首先是相同级别,然后再深入,不要错过任何一对。
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $key => $item) {
// LOGIC
}
答案 2 :(得分:0)
您可以创建一个递归函数来处理它。
function sweep_array(array $array)
{
foreach($array as $key => $value){
if(is_array($value))
{
sweep_array($value);
}
else
{
echo $key . " => " . $value . "<br>";
}
}
}