【问题标题】:array returns null outside foreach but has values inside foreach数组在 foreach 外部返回 null,但在 foreach 内部有值
【发布时间】: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 我添加了输出。

标签: php arrays foreach


【解决方案1】:

我不能声称这背后有任何可靠的推理,只是程序员的直觉,试试吧:

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

【讨论】:

猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
相关资源
最近更新 更多