简体   繁体   中英

Php array in a foreach loop

I have been trying to create a Multidimensional array from an already existing array. The reason I am doing this is so I can separate the super array into a more categorized version so that later on I can run foreach on just those categories in another script.

This is a snippet of code // Please read comments :)

$and = array();

if($this-> input-> post('and')) // This is the super array and[] from a previous input field
{
    if(preg_grep("/reason_/", $this-> input-> post('and'))) // Search for the reason_
    {
        foreach($this-> input-> post('and') as $value) // if reason_ is present 
        {
            $and['reason_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then i would get only values like 1, 2, 3, 4, and then concatenate them to the index
        }
    }
    if(preg_grep("/status_/", $this-> input-> post('and'))) // Search for status
    {
        foreach($this-> input-> post('and') as $value) // If it is in the super array
        {
            $and['status_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then I would get values again like 1,2,3,4,5 and then concatenate them to the index
        }
    }
}

This approach is not giving me expected outcome however, I am getting a big string like so :

 array(2) { ["reason_and"]=> string(24) "2 , 3 , 4 , 3 , 4 , 5 , " 
            ["status_and"]=> string(24) "2 , 3 , 4 , 3 , 4 , 5 , " 

So to my knowledge (which is limited) when I try to do a foreach over the array

[reason_and]

I only get one loop since the array ["reason_and] only has one value (the 24 character string?). Is it possible to have the reason_and have a value for each of the numbers?

Is this even possible? I'm quite confused.

I've referred to this question for reference but I still do not get a outcome that I can work with. Thanks in advance.

This

        $and['reason_and'] .= end(explode('_', $value)) . ' , ';
                          ^^^^----

should be

        $and['reason_and'][] = end(explode('_', $value)) . ' , ';
                          ^^--

which turns it into an "array push" operation, not a string concatenation. Then 'reason_and' will be an array, and you foreach over it.

first of all preg_grep returns an array with matched values, so

    $andArray = $this-> input-> post('and'); // This is the super array and[] from a previous input field

    if($andArray) {

    $reason = preg_grep("/reason_/", $andArray); // Search for the reason_

       if($reason) { // if reason_ is present 

foreach($reason as $value) {
                $and['reason_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then i would get only values like 1, 2, 3, 4, and then concatenate them to the index
            }
        }

    $status = preg_grep("/status_/", $andArray); // Search for status

        if($status) {

            foreach($status as $value){ // If it is in the super array

                $and['status_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then I would get values again like 1,2,3,4,5 and then concatenate them to the index
            }
        }
    }

Or if you need result as array, then remove ' , ' and replace dot with [];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM