【发布时间】:2017-07-12 09:02:34
【问题描述】:
我有一个名为slideIcons 的数组。这个数组是从一个 foreach 循环内部填充的,如下所示:
$slideIcons = [];
foreach ($data[$key]["icons"] as $icon) {
$slideIcons[] = $icon["preview_url"];
}
但是,当我尝试这样做时:
die(var_dump(($slideIcons)
在 foreach 循环之外(循环之后),打印的结果是它是一个空数组。这很奇怪,因为如果我像这样运行代码:
$slideIcons = [];
foreach ($data[$key]["icons"] as $icon) {
$slideIcons[] = $icon["preview_url"];
die(var_dump($slideIcons));
}
打印出来:
array(1) {
[0]=>
string(54) "https://d30y9cdsu7xlg0.cloudfront.net/png/2300-200.png"
}
所以似乎$slideIcons 变量以某种方式被重置,但我看不出有任何可能。
为了进行故障排除,我将变量的名称更改为 100% 确定它不会被覆盖,但这并没有改变结果。我也试过替换
$slideIcons[] = $icon["preview_url"];
为:
array_push($slideIcons, $icon["preview_url"]);
但这也没有改变结果。那么有没有可能,由于某种疯狂的原因,变量被重置为其基值,或者我在这里遗漏了什么?
谢谢。
编辑:
更多信息,$key 变量由其父级传递给此函数,其中包含一个foreach 循环。但是,这无关紧要,因为$slideIcons 变量在其父 foreach 重置之前已保存到数据库中。为方便起见,我包含了完整的功能:
private function createSlides($key, $answer, $data)
{
$slideIcons = [];
foreach ($data[$key]["icons"] as $icon) {
$slideIcons[] = $icon["preview_url"];
}
$keywords = $data[$key]['keywords'];
$image_keywords = $data[$key]['image_keywords'];
$images = $data[$key]['images'];
$content = $this->addContent($keywords, $images);
$this->presentation->slides()->create([
'presentation_id' => $this->presentation->id,
'pitch_answer_id' => $answer->id,
'order' => $key,
'keywords' => $keywords,
'image_keywords' => $image_keywords,
'images' => $images,
'icons' => $slideIcons,
'content' => $content
]);
}
当我var_dump($data[$key]["icons"])(在 foreach 循环之前)时,结果如下:
array(4) {
[0]=>
array(23) {
["attribution"]=>
string(44) "people by Roman J. Sokolov from Noun Project"
["attribution_preview_url"]=>
string(62) "https://d30y9cdsu7xlg0.cloudfront.net/attribution/2300-600.png"
["collections"]=>
array(0) {
}
["date_uploaded"]=>
string(10) "2012-04-26"
["id"]=>
string(4) "2300"
["is_active"]=>
string(1) "1"
["is_explicit"]=>
string(1) "0"
["license_description"]=>
string(28) "creative-commons-attribution"
["nounji_free"]=>
string(1) "0"
["permalink"]=>
string(17) "/term/people/2300"
["preview_url"]=>
string(54) "https://d30y9cdsu7xlg0.cloudfront.net/png/2300-200.png"
["preview_url_42"]=>
string(53) "https://d30y9cdsu7xlg0.cloudfront.net/png/2300-42.png"
["preview_url_84"]=>
string(53) "https://d30y9cdsu7xlg0.cloudfront.net/png/2300-84.png"
}
}
(除此之外还有更多的数组元素,但它们都具有相同的结构。)
【问题讨论】:
-
var_dump($data[$key]["icons"])会得到什么? -
$key 来自另一个 foreach?
-
如果那里还有另一个 foreach,那么您在每次运行时都会重置数组..
-
把
die(var_dump(($slideIcons)放在foreach循环之后...否则它会在变量被填充之前死掉。 -
@GordonM 我添加了输出。