首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从PHP数组中获取每个键值对

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

Stack Overflow用户
提问于 2016-12-24 13:01:16
回答 3查看 7.7K关注 0票数 6

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

是否存在一个具有foreach-function和每个键/值的函数?

EN

回答 3

Stack Overflow用户

发布于 2016-12-24 13:12:14

这类任务的通常方法是使用递归

让我们一步一步地走:

首先您需要foreach控制语句..。

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

..that允许您在不事先知道键名的情况下解析关联数组。

然后是is_arrayis_string (最后是is_objectis_integer.)让您检查每个值的类型,这样您就可以正确地操作。

http://php.net/manual/en/function.is-array.php

http://php.net/manual/en/function.is-string.php

如果找到要操作的字符串,则执行替换任务

如果您找到一个数组,该函数会回忆自己传递刚才解析的数组。

通过这种方式将原始数组解析到最深的级别,而不会丢失和键值对.

示例:

代码语言:javascript
运行
复制
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 );
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-12-24 13:27:29

没有一个内置的函数可以像您所期望的那样工作,但是您可以使用RecursiveIteratorIterator来调整它,递归地遍历多维数组,并且使用标志RecursiveIteratorIterator::SELF_FIRST,您将首先获得相同级别的所有元素,然后再深入,不会丢失任何对。

代码语言:javascript
运行
复制
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $key => $item) {
    // LOGIC
}
票数 2
EN

Stack Overflow用户

发布于 2016-12-24 13:13:59

您可以创建一个递归函数来处理它。

代码语言:javascript
运行
复制
function sweep_array(array $array)
{
    foreach($array as $key => $value){

        if(is_array($value))
        {
            sweep_array($value);
        } 
        else 
        {
            echo $key . " => " . $value . "<br>";
        }   
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41313495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档