我有一个名为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"
}
}
(有更多的数组元素就是那个,但它们都具有相同的结构。)
答案 0 :(得分:1)
我无法在此背后提出任何可靠的推理,只是程序员的直觉,请尝试:
$icons = $data[$key]["icons"];
foreach ($icons as $icon) {
$slideIcons[] = $icon["preview_url"];
}