数组在foreach外返回null,但在foreach

时间:2017-02-22 11:00:25

标签: php arrays foreach

我有一个名为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"
  }
}

(有更多的数组元素就是那个,但它们都具有相同的结构。)

1 个答案:

答案 0 :(得分:1)

我无法在此背后提出任何可靠的推理,只是程序员的直觉,请尝试:

$icons = $data[$key]["icons"];
foreach ($icons as $icon) {
    $slideIcons[] = $icon["preview_url"];
}