Roland
Roland

Reputation: 9701

Exploding a string results in weird array

I have a string that looks like this "thing aaaa" and I'm using explode() to split the string into an array containing all the words that are separated by space. I execute something like this explode (" ", $string) .

I'm not sure why but the result is : ["thing","","","","aaaa"]; Does anyone have an idea why I get the three empty arrays in there ?

EDIT : This is the function that I'm using that in :

public function query_databases() {

        $arguments_count = func_num_args();
        $status = [];
        $results = [];
        $split =[];

        if ($arguments_count > 0) {

            $arguments = func_get_args();

            $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arguments));

            foreach ($iterator as $key => $value) {
                array_push($results, trim($value));
            }
            unset($value);

            $filtered = $this->array_unique_values($results, "String");

            foreach ($filtered as $key => $string) {

                if (preg_match('/\s/',$string)) {
                    array_push($split, preg_split("/\s/", $string));
                } else {
                    array_push($split, $string);
                }

            }
            unset($string);

            echo "Terms : ".json_encode($split)."<br>";

            foreach ($filtered as $database) {

                echo "Terms : ".json_encode()."<br>";
                $_action = $this->get_database($database);
                echo "Action : ".json_encode($_action)."<br>";
            }
            unset($database);


        } else {
            return "[ Databases | Query Databases [ Missing Arguments ] ]";
        }

    }

It might be something else that messes up the result ?!

Upvotes: 0

Views: 150

Answers (3)

Roland
Roland

Reputation: 9701

As @Barmar said, my trim() just removes all the space before and after the words, so that is why I had more values in the array than I should have had.

I found that this little snippet : preg_replace( '/\s+/', ' ', $value ) ; replacing my trim() would fix it :)

Upvotes: 0

Nick
Nick

Reputation: 639

try this:

$str = str_replace(" ", ",", $string);
explode(",",$str);

This way you can see if it is just the whitespace giving you the problem if you output 4 commas, it's because you have 4 whitespaces.

Upvotes: 0

PlantTheIdea
PlantTheIdea

Reputation: 16369

If you are looking to create an array by spaces, you might want to consider preg_split:

preg_split("/\s+/","thing aaaa");

which gives you array ("thing","aaaa");

Taken from here.

Upvotes: 1

Related Questions