Exploding an array and removing prefix

18,914

Solution 1

<?php 
foreach($d as $k => $v)
{
    $d2 = explode(':',$v);
    $array[$d2[0]] = $d2[1];
}
?>

Solution 2

This should work:

$arr = array();
$d = explode(',', $string);
for($d as $item){
   list($key,$value) = explode(':', $item);
   $arr[$key] = $value;
}

Solution 3

This is a simple solution using loops:

$string = "a:1,b:2,c:3,d:4,e:5,f:6,g:7";
$pairs = explode(',', $string);
$a = array();
foreach ($pairs as $pair) {
    list($k,$v) = explode(':', $pair);
    $a[$k] = $v;
}
var_export($a);

You can also do this (in PHP >= 5.3) in a more functional manner:

$string = "a:1,b:2,c:3,d:4,e:5,f:6,g:7";
$pairs = explode(',', $string);
$items = array_map(
    function($e){
        return explode(':', $e);
    },
    $pairs
);
$a = array_reduce(
    $items,
    function(&$r, $e) {
        $r[$e[0]] = $e[1];
        return $r;
    },
    array()
);

var_export($a);
Share:
18,914
Wawan Brutalx
Author by

Wawan Brutalx

Fullstack Web Developer ( Laravel, AngularJS )

Updated on June 13, 2022

Comments

  • Wawan Brutalx
    Wawan Brutalx almost 2 years

    I an trying to create an array using explode for a string.

    Here is my string:

    $string = "a:1,b:2,c:3,d:4,e:5,f:6,g:7";
    

    And here's my complete code:

    $string = "a:1,b:2,c:3,d:4,e:5,f:6,g:7";
    $d = explode(',', $string);
    echo '<pre>';
    var_dump($d);
    

    and after that i got the result like this..

    array(7) {
      [0]=>
      string(3) "a:1"
      [1]=>
      string(3) "b:2"
      [2]=>
      string(3) "c:3"
      [3]=>
      string(3) "d:4"
      [4]=>
      string(3) "e:5"
      [5]=>
      string(3) "f:6"
      [6]=>
      string(3) "g:7"
    }
    

    How can I create an array like this instead?:

    array(7) {
      ["a"]=>
      string(1) "1"
      ["b"]=>
      string(1) "2"
      ["c"]=>
      string(1) "3"
      ["d"]=>
      string(1) "4"
      ["e"]=>
      string(1) "5"
      ["f"]=>
      string(1) "6"
      ["g"]=>
      string(1) "7"
    }