【发布时间】:2016-02-03 22:47:58
【问题描述】:
我正在尝试提取混合关联数组,例如:
<pre>
<?php
bar();
function bar(){
$apple = 6;
$ball = 2;
$cat = 3;
$data = ["apple" => 1, $ball,$cat];
foo($data);
}
function foo($data){
extract($data);
echo "<br />apple:" . $apple;
echo "<br />ball:" . $ball;
echo "<br />cat:" . $cat;
}
?>
</pre>
$data 数组只能是数字的,只能是关联的或两者兼有。如果数组的元素缺少索引,它应该与变量相同。
【问题讨论】:
-
@Andrew,不。数组有时只能关联或数字。它们混合到任何水平。
-
$ball和$cat在范围内定义(提取之前),因此它们仍然存在。这就是为什么它们不能正常工作的原因。运行提取时,数组没有分配给变量的索引。 . -
RTFM -> extract 使用键作为变量名创建变量,值作为... erm... 值。在您的第一个 sn-p 中,恰好
$cat和$ball与数组中的键0和1具有相同的值,但extract实际上跳过了数字索引 -
如果不是范围,则意味着您的数据不适合用于
extract()。迭代您的数组并将数据手动收集到变量中,而不是使用extract()来确保您获得值。 -
@tika 为什么一定要有数字键?你不能强制阵列如你所愿吗?如果名称不在键中,您如何知道 $data[0] 是 $ball 的值?如果您无法控制
$data,您可能必须获取一个映射数组,说明预期的变量顺序是什么......为了说“第一个值是苹果,第二个是球,第三个是猫” ...然后使用此映射数组手动提取数据...