Search code examples
phparraysstringassociative-array

Transform every two array items into associative array pairs


I'm trying to make an associative array from my string, but nothing works and I don't know where the problem is.

My string looks like:

$string = "somethink;452;otherthink;4554;somethinkelse;4514"

I would like to make an associative array, where "text" is the key, and the number is value.

Somethink => 452 otherthink => 4554 Somethinkelse => 4514

I tried to convert the string into an array and then to the associative array but it's not working. I decided to use:

$array=explode(";",$string);

Then tried to use a foreach loop but it's not working. Can somebody help?


Solution

  • Using regex and array_combine:

    $string = "somethink;452;otherthink;4554;somethinkelse;4514";
    
    preg_match_all("'([A-Za-z]+);(\d+)'", $string, $matches);
    $assoc = array_combine($matches[1], $matches[2]);
    
    print_r($assoc);
    

    Using a traditional for loop:

    $string = "somethink;452;otherthink;4554;somethinkelse;4514";
    $arr = explode(";", $string);
    
    for ($i = 0; $i < count($arr); $i += 2) {
        $assoc[$arr[$i]] = $arr[$i+1];
    }
    
    print_r($assoc);
    

    Result:

    Array
    (
        [somethink] => 452
        [otherthink] => 4554
        [somethinkelse] => 4514
    )
    

    Note that there must be an even number of pairs; you can add a condition to test this and use a substitute value for any missing keys, or omit them.