2017-02-22 5 views
0

У меня есть массив с именем slideIcons. Этот массив заполняется внутри цикла Еогеаспа так:массив возвращает значение null за пределами foreach, но имеет значения внутри foreach

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

Однако, когда я пытаюсь сделать это:

die(var_dump(($slideIcons)

снаружи петли Еогеаспа (после цикла), то напечатанный результат - это пустой массив. Что странно, потому что если я запускаю код вроде этого:

$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"]);

, но это не изменит результат либо. Возможно ли, что по какой-то дикой причине переменная сбрасывается до ее базового значения или я что-то здесь не вижу?

Спасибо.

Edit: Некоторые больше информации, переменная $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"]) (до цикла Еогеаспа) это результат:

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

Что вы получаете, если вы 'var_dump ($ data [$ key] [" icons "])'? – GordonM

+0

$ ключ исходит от другого foreach? – Nerea

+0

Если у вас есть другой выбор для вас, вы сбрасываете массив при каждом запуске. – Celoain

ответ

1

Я не могу утверждать любое твердое обоснование этого, интуиция всего в программиста, попробуйте:

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

почему? что изменилось и почему это работает? – Martin

+0

Я точно не знаю, почему это сработает. Но где-то там должно быть что-то низкоуровневое, как работает foreach: http://stackoverflow.com/questions/10057671/how-does-php-foreach-actually-work –

Смежные вопросы