Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP数组中获取每个键值对_Php_Arrays_Foreach - Fatal编程技术网

如何从PHP数组中获取每个键值对

如何从PHP数组中获取每个键值对,php,arrays,foreach,Php,Arrays,Foreach,我需要从PHP中的数组中获取每个键值对。结构不同且不可规划,例如,键可能包含其他数组,等等(多维数组?)。我要调用的函数的任务是替换值中的特定字符串。问题在于函数foreach,each。。。仅使用主键和值 是否存在一个具有foreach-函数和every键/值的函数?处理此类任务的常用方法是使用递归函数 让我们一步一步来: 首先,您需要foreach控制语句 …这使您可以解析关联数组,而不必事先知道键的名称 然后,是数组和是字符串(最后,是对象,是整数…)让您检查每个值的类型,以便正确操作

我需要从PHP中的数组中获取每个键值对。结构不同且不可规划,例如,键可能包含其他数组,等等(多维数组?)。我要调用的函数的任务是替换值中的特定字符串。问题在于函数
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')我得到的附加路径是哪个键$水果昨天有人遇到了类似的问题:请查看最新的答案,应该会有帮助。