如何从PHP数组中获取每个键值对
我需要从PHP中的数组中获取每个键值对。结构不同且不可规划,例如,键可能包含其他数组,等等(多维数组?)。我要调用的函数的任务是替换值中的特定字符串。问题在于函数如何从PHP数组中获取每个键值对,php,arrays,foreach,Php,Arrays,Foreach,我需要从PHP中的数组中获取每个键值对。结构不同且不可规划,例如,键可能包含其他数组,等等(多维数组?)。我要调用的函数的任务是替换值中的特定字符串。问题在于函数foreach,each。。。仅使用主键和值 是否存在一个具有foreach-函数和every键/值的函数?处理此类任务的常用方法是使用递归函数 让我们一步一步来: 首先,您需要foreach控制语句 …这使您可以解析关联数组,而不必事先知道键的名称 然后,是数组和是字符串(最后,是对象,是整数…)让您检查每个值的类型,以便正确操作
foreach
,each
。。。仅使用主键和值
是否存在一个具有
foreach
-函数和every键/值的函数?处理此类任务的常用方法是使用递归函数
让我们一步一步来:
首先,您需要foreach
控制语句
…这使您可以解析关联数组,而不必事先知道键的名称
然后,是数组
和是字符串
(最后,是对象
,是整数
…)让您检查每个值的类型,以便正确操作
如果找到要操作的字符串,则执行替换任务
如果找到一个数组,函数将通过刚刚解析的数组调用自身
这样,原始数组将被解析到最深层次,而不会丢失和键值对。
示例:
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 );
}
}
}
您可以创建一个递归函数来处理它
function sweep_array(array $array)
{
foreach($array as $key => $value){
if(is_array($value))
{
sweep_array($value);
}
else
{
echo $key . " => " . $value . "<br>";
}
}
}
函数扫描\u数组(数组$array)
{
foreach($key=>$value的数组){
if(是_数组($value))
{
扫描数组($value);
}
其他的
{
echo$key.“=>”$value.“
”;
}
}
}
没有一个内置函数可以像您期望的那样工作,但是您可以使用,递归地遍历多维数组,并使用标志RecursiveIteratorIterator::SELF_FIRST
,首先获得同一级别的所有元素,然后再深入,不丢失任何一对
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $key => $item) {
// LOGIC
}
-它不会涵盖所有情况(更复杂的结构?)。但是,应该会有所帮助-基本上,您需要递归->检查值是否为数组,再次调用函数,等等@例如,当我的代码是
$fruits=['sweet'=>[“hi”=>“nett”],'sour'=>'lemon']时,是否可以检索完整的var-“path”/parent键;函数test_print($item,$key){echo“$key持有$item\n”}数组_walk_recursive($fruits,'test_print')代码>我得到的附加路径是哪个键$水果昨天有人遇到了类似的问题:请查看最新的答案,应该会有帮助。