将php数组更改为单个变量的简便方法

时间:2016-05-19 23:14:24

标签: php

以下数组是名为$ result的数组的print_r。 我想知道将数组更改为一组变量的最佳方法,我可以将这些项作为变量访问,例如,如果我想查看[queued_at]值,我可以使用名为$ queued_at的变量。 / p>

数组([response] =>数组([success] => 1 [结果] =>数组([success] =>数组([0] =>数组([id] => 16623749 [device_id] => 22233 [消息] => hi gg 2 [status] =>待定[send_at] => 1463693469 [queued_at] => 0 [sent_at] => 0 [deliver_at] =&gt ; 0 [expires_at] => 1463697069 [canceled_at] => 0 [failed_at] => 0 [received_at] => 0 [错误] => [created_at] => 1463693469 [联系] =>数组([id] => 3801452 [name] => Gg [number] => +64210419805)))[failed] => Array()))[status] => 200)

以下是数组的格式化版本:

Array
(
    [response] => Array
        (
            [success] => 1
            [result] => Array
                (
                    [success] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 16627521
                                    [device_id] => 22269
                                    [message] => test 10:37
                                    [status] => pending
                                    [send_at] => 1463700123
                                    [queued_at] => 0
                                    [sent_at] => 0
                                    [delivered_at] => 0
                                    [expires_at] => 1463703723
                                    [canceled_at] => 0
                                    [failed_at] => 0
                                    [received_at] => 0
                                    [error] => 
                                    [created_at] => 1463700123
                                    [contact] => Array
                                        (
                                            [id] => 3801855
                                            [name] => +64212465478
                                            [number] => +64212465478
                                        )

                                )

                        )

                    [fails] => Array
                        (
                        )

                )

        )

    [status] => 200
)

3 个答案:

答案 0 :(得分:4)

你可以使用extract()来做到这一点,例如。提取($ array,EXTR_OVERWRITE),但你需要注意几件事情:

  1. 如果有两个具有相同键的项目 - 必须覆盖或跳过一个项目。这是你自己任务的限制。

  2. 我看到你有嵌套数组,extract()可能不够智能,但你可以尝试这里提出的nested_extract()方法:http://php.net/manual/en/function.extract.php(参见评论部分)< / p>

  3. 无论如何我都不建议这样做。如果您只需要一种简单的方法来访问数组内部的数据 - 只需编写一个智能查找器函数来查找嵌套数组中的特定键。

  4. 替代解决方案 - 而不是创建额外的临时变量,只需根据键名访问数组中的数据:

    // This function will convert multi-dimensional array to a single dimensional one
    // If two items have the same keys - the former will be overwritten
    function flatten(array $array)
    {
        $return = array();
        array_walk_recursive($array, function($a, $key) use (&$return) { $return[$key] = $a; });
        return $return;
    }
    
    // This is a wrapper for the whole feature - flatten array and look for a key
    function nested_key_search(array $array, $key)
    {
        $flat = flatten($array);
        return $flat[$key] ?: false;
    }
    
    print_r(nested_key_search($array, 'coffee'));
    

答案 1 :(得分:1)

您可以使用extract功能。这会将所有数组键转储到当前变量池中。有几个标志可用于确定在发生碰撞时要做什么。例如:

extract($result, EXTR_PREFIX_ALL, "r_");

将允许您访问所有数组键作为前缀为&#34; r _&#34;的变量。

答案 2 :(得分:0)

我认为通过在普通foreach循环中使用变量将为您提供所需的内容。

示例:

$array = $result['response']['result']['success'][0];

foreach($array as $varname => $value)
{
  if(is_string($value)) $$varname = $value;
}