Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 718453
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T05:31:42+00:00 2026-05-14T05:31:42+00:00

It often happens to me to handle data that can be either an array

  • 0

It often happens to me to handle data that can be either an array or a null variable and to feed some foreach with these data.

$values = get_values();

foreach ($values as $value){
  ...
}

When you feed a foreach with data that are not an array, you get a warning:

Warning: Invalid argument supplied for foreach() in […]

Assuming it’s not possible to refactor the get_values() function to always return an array (backward compatibility, not available source code, whatever other reason), I’m wondering which is the cleanest and most efficient way to avoid these warnings:

  • Casting $values to array
  • Initializing $values to array
  • Wrapping the foreach with an if
  • Other (please suggest)
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T05:31:43+00:00Added an answer on May 14, 2026 at 5:31 am

    There are three reasons that may cause this error:

    1. A bug in the program. For example, get_values() is expected to return an array, but it returns something else. In this case you must start debugging the code, find the reason why get_values() doesn’t return an array, and fix it.

    2. get_values() may return an array or indicate that there is no data at all, by returning null (or false). In this case, you must add a condition which explicitly checks for this value, i.e.

       if ($values !== null)
       {
           foreach ($values as $value)
           {
               ...
           }
       }
      

      Here, PHP will be able to help you, by raising an alarm, when unexpected data type (i.e. neither null or array) would be provided (which means the bug in the code and you have to debug it again).

    3. The code is just carelessly written and may return anything, so all you want is to get rid of this warning. But the most important part about warnings is that a programmer should never "avoid" (in the meaning or "silence") them.
      Warnings are programmer’s friends, so don’t waste their power. Properly organize your code the way it would only return expected data types. This way you will never get false alarms that have to be silenced. And at the same time PHP will be able to help you when unexpected data type would be provided (meaning that some code or input is not okay).
      When you have no control on the input data it would be a good idea to validate it before processing. In case an array is obligatory, then return an error and stop processing. In case an array is optional, initialize it as empty array. And so you won’t see this error again.
      Only if don’t care whether your input is boolean, or string or actually iterable you may use the approach below, which purpose is just to sweep the dirt under the rug:

       if (is_array($values) || is_object($values))
       {
           foreach ($values as $value)
           {
               ...
           }
       }
      
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is there any easy/general way to clean an XML based data source prior to
In a web application like wiki or forums or blogging software, it is often
After reading some threads on misuses of exceptions (basically saying you don't want to
I have a large collection of data in an excel file (and csv files).
I have an application that send very big quantity of requests to the server
Often when I do a checkout of a different branch, or a reset, I
I have several files with code testing code (which uses a unittest class). Later
Possible Duplicate: Convention question: When do you use a Getter/Setter function rather than using
I'm working on a rather large classic asp / SQL Server application. A new

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.