You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现Hangman游戏时foreach遍历报错Invalid argument supplied for foreach()求助

Fixing "Invalid argument supplied for foreach()" in Your PHP Hangman Game

Hey there! That error pops up because the $_SESSION['hidden'] variable you're trying to loop through isn't a valid array—it might be null, a string, or not even initialized at all. Let's break down the common issues and fixes:

Common Causes & Solutions

1. You forgot to start the session or initialize $_SESSION['hidden'] as an array

PHP sessions won't work unless you call session_start() at the very top of your script (before any HTML output or echoes). Also, if you haven't set $_SESSION['hidden'] to an array when starting the game, it'll be null by default, which can't be looped over.

Fix:
First, make sure session_start() is present. Then initialize $_SESSION['hidden'] as an array when the game starts (e.g., when a new word is chosen):

// At the TOP of your script, before any output
session_start();

// Initialize the hidden word array when starting a new game
$secret_word = "hangman"; // Your chosen word
$_SESSION['hidden'] = array_fill(0, strlen($secret_word), '_');

2. $_SESSION['hidden'] got overwritten to a non-array value

Maybe somewhere else in your code, you accidentally set $_SESSION['hidden'] to a string, number, or null (like when handling guesses incorrectly). This breaks the foreach loop since it only works on arrays/iterables.

Fix:
Add a check to ensure $_SESSION['hidden'] is an array before looping. You can use the null coalescing operator to default to an empty array if it doesn't exist:

session_start();

// Safely get the hidden array, default to empty if missing
$hidden = $_SESSION['hidden'] ?? [];

// Only loop if it's a valid array
if (is_array($hidden)) {
    foreach ($hidden as $character) {
        echo $character . " ";
    }
} else {
    // Handle the error (e.g., restart the game or show a message)
    echo "Oops! Game data is corrupted. Let's start over.";
    // Optional: Re-initialize the game here
}

3. Session data isn't being saved properly

In some server environments, session configuration issues can prevent $_SESSION variables from persisting between page loads. This would make $_SESSION['hidden'] disappear or become null when you refresh the page.

Fix:
Test if your session is working by adding a debug line right after setting $_SESSION['hidden']:

session_start();
$secret_word = "hangman";
$_SESSION['hidden'] = array_fill(0, strlen($secret_word), '_');

// Debug: Check if the session variable exists and is an array
var_dump($_SESSION['hidden']);

If this shows null or a non-array, double-check your server's session settings (like session.save_path being writable) and ensure session_start() is always called before accessing $_SESSION.

Full Working Snippet Example

Here's a quick example tying it all together:

<?php
session_start();

// Start a new game if no hidden word exists
if (!isset($_SESSION['hidden'])) {
    $secret_word = "hangman";
    $_SESSION['hidden'] = array_fill(0, strlen($secret_word), '_');
}

// Safely get and display the hidden word
$hidden = $_SESSION['hidden'] ?? [];
if (is_array($hidden)) {
    foreach ($hidden as $character) {
        echo $character . " ";
    }
} else {
    echo "Game error: Please refresh to start over.";
}
?>

内容的提问来源于stack exchange,提问作者edeath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:45