如何从PHP-array

时间:2016-12-24 13:01:17

标签: php arrays foreach

我需要从PHP中的数组中获取每个键值对。结构是不同的并且不可规划,例如,密钥可能包含附加数组等(多维数组?)。我想调用的函数的任务是从值中替换特定的字符串。问题是函数foreacheach,...只使用主键和值。

是否存在具有foreach功能且每个键/值的功能?

3 个答案:

答案 0 :(得分:1)

此类任务的常用方法是使用递归功能

让我们一步一步走:

首先,您需要foreach控制声明...

http://php.net/manual/en/control-structures.foreach.php

..让你解析关联数组而不知道键'事先说出名字。

然后is_arrayis_string(以及最终is_objectis_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>";
        }   
    }
}