以下数组是名为$ 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
)
答案 0 :(得分:4)
你可以使用extract()来做到这一点,例如。提取($ array,EXTR_OVERWRITE),但你需要注意几件事情:
如果有两个具有相同键的项目 - 必须覆盖或跳过一个项目。这是你自己任务的限制。
我看到你有嵌套数组,extract()可能不够智能,但你可以尝试这里提出的nested_extract()方法:http://php.net/manual/en/function.extract.php(参见评论部分)< / p>
无论如何我都不建议这样做。如果您只需要一种简单的方法来访问数组内部的数据 - 只需编写一个智能查找器函数来查找嵌套数组中的特定键。
替代解决方案 - 而不是创建额外的临时变量,只需根据键名访问数组中的数据:
// 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;
}