0

How can I make the code below into a function?

# split the string by string on boundaries formed by the string delimiter will split the value into an array like the example below,
# Array
# (
#     [0] => pg_cat_id=1
#     [1] => tmp_id=4
#     [2] => parent_id=2
# )
$array_parent = explode("&", $string);
//print_r($array_parent);

# now loop the array.
for($i = 0; $i < count($array_parent); $i++)
{   
    # split the array into smaller arrays with the string delimiter, like the example below,
    #   Array
    #   (
    #       [0] => pg_cat_id
    #       [1] => 1
    #   )
    #   Array
    #   (
    #       [0] => tmp_id
    #       [1] => 4
    #   )
    #   Array
    #   (
    #       [0] => parent_id
    #       [1] => 2
    #   )
    $array_child = explode("=", $array_parent[$i]);
    //print_r($array_child);

    # loop each of the array.
    for($a = 0; $a < count($array_child); $a++)
    {   
        # get the first value in each array and store it in a variable.
        $v = $array_child[0];

        # make the variable variable (sometimes it is convenient to be able to have variable variable names. 
        # that is, a variable name which can be set and used dynamically. a variable variable takes the value 
        # of a variable and treats that as the name of a variable). 
        ${$v} = $array_child[1];
    }
}

so that I can call the function whenever I need it, such as below,

$string = 'pg_cat_id=1&tmp_id=4&parent_id=2';

echo stringToVarVars($string);

echo $tmp_id; // I will get 4 as the restult.

Many thanks, Lau

1
  • 3
    Don't do that. Don't try to re-implement register_globals... Commented Aug 20, 2010 at 13:20

4 Answers 4

3

Are you parsing a query string? You could use parse_str().

Sign up to request clarification or add additional context in comments.

Comments

2

Full working code here. No need to create a function. Just two line of codes are enough.

<?php
$string = 'pg_cat_id=1&tmp_id=4&parent_id=2';

parse_str($string, $result);
extract($result);

echo $tmp_id;  // output: 4
?>

1 Comment

oh thank you so much. this save lots of my tedious code! thanks :)
1

Use the global keyword to set variables outside of the function.

function stringToVarVars($string)
{
    ...
    global ${$v};
    ${$v} = ...;
}

Comments

0

Use an array instead of variable variables:

function stringToVarVars($string)
{
    ...
    $result[$v] = ...;
    return $result;
}

$variables = stringToVarVars($string);
echo $variables['tmp_id'];

1 Comment

I'm not sure why you didn't combine your two very similar answers into one. Hoping to double dip on upvotes? Perhaps just delete this one and merge the answers into the upvoted one.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.