字符串到数组转换[PHP]

Simple question how can i transform this string:

"'One' => 1,'Two' => 2,'Three' => 3,'Four' => 4,"

To an array like this :

array['One'] = 1;
array['Two'] = 2;
array['Three'] = 3;
array['Four'] = 4;

Use regex and array_combine

preg_match_all('/\'(\w+)\'\s*=>\s*(\d+)/', $str, $m);
print_r(array_combine($m[1], $m[2]));

demo

$string = "'One' => 1,'Two' => 2,'Three' => 3,'Four' => 4,";
$array = explode(',',$string);
foreach($array as $item){
    $new_items = explode(' => ', $item);
    $key = $new_items[0];
    $value = $new_items[1];
    $new_array[][$key] = $value;
}
var_dump($new_array);

You can simply use the php function array_flip:

array_flip — Exchanges all keys with their associated values in an array

Warning on collision:

If a value has several occurrences, the latest key will be used as its value, and all others will be lost.

Example #2 array_flip() example : collision

<?php
$input = array("a" => 1, "b" => 1, "c" => 2);
$flipped = array_flip($input);

print_r($flipped);
?>

The above example will output:

Array
(
    [1] => b
    [2] => c
)

Here a tested solution:

    $input = "'One' => 1,'Two' => 2,'Three' => 3,'Four' => 4,";
    $gen = new ArrayGenerator($input);
    $this->assertSame([
        'One' => 1,
        'Two' => 2,
        'Three' => 3,
        'Four' => 4,
    ], $gen->translate());

and here complete code

use PHPUnit\Framework\TestCase;

class FooTest extends TestCase
{
    public function testItems()
    {
        $input = "'One' => 1,'Two' => 2,'Three' => 3,'Four' => 4,";
        $parser = new Parser($input);
        $this->assertEquals([
            "'One' => 1",
            "'Two' => 2",
            "'Three' => 3",
            "'Four' => 4"
        ], $parser->items());
    }

    public function testKeyValue()
    {
        $input = "'One' => 1";
        $parser = new KeyValue($input);
        $this->assertEquals([
            "'One'",
            "1",
        ], $parser->items());
    }

    public function testKeyValueWithoutQuotas()
    {
        $input = "'One' => 1";
        $parser = new KeyValue($input);
        $this->assertEquals([
            "One",
            "1",
        ], $parser->itemsWithoutQuotas());
    }

    public function test()
    {
        $input = "'One' => 1,'Two' => 2,'Three' => 3,'Four' => 4,";
        $gen = new ArrayGenerator($input);
        $this->assertSame([
            'One' => 1,
            'Two' => 2,
            'Three' => 3,
            'Four' => 4,
        ], $gen->translate());
    }
}

class ArrayGenerator
{
    private $input;

    public function __construct(string $input)
    {
        $this->input = $input;
    }

    public function translate()
    {
        $parser = new Parser($this->input);
        $parsed = $parser->items();

        $trans = [];

        foreach ($parsed as $item) {
            $pair = new KeyValue($item);
            $trans[$pair->itemsWithoutQuotas()[0]] = (int) $pair->itemsWithoutQuotas()[1];
        }

        return $trans;
    }
}

class KeyValue
{
    private $input;

    public function __construct(string $input)
    {
        $this->input = $input;
    }

    public function items()
    {
        $exploded = explode(' => ', $this->input);
        return $exploded;
    }

    public function itemsWithoutQuotas()
    {
        $items = $this->items();
        foreach ($items as $key => $item) {
            $items[$key] = str_replace("'", "", $item);
        }
        return $items;
    }
}

class Parser
{
    private $input;

    public function __construct(string $input)
    {
        $this->input = $input;
    }

    public function items()
    {
        $exploded = explode(',', $this->input);
        $exploded = array_filter($exploded, function ($item) {
            return $item != "";
        });
        return $exploded;
    }
}