Create an associative array in php with dynamic key and value

62,928

Solution 1

You are way over-complicating this problem. This can be done simply, with fewer loops.

First, you only need to run the SQL once. Second, build the array in the 1st loop.

$sql = mysql_query('SELECT * FROM monthly_salary');

$associativeArray = array();
while($row = mysql_fetch_array($sql)){
   // Put the values into the array, no other variables needed
   $associativeArray[$row['month']] = $row['salary'];
}

foreach($associativeArray as $k => $id){
    echo $k."=>".$id;
}

Solution 2

Why don't you just do:

$associativeArray = array();
while($row = mysql_fetch_array($sql)){
    $associativeArray[$row['month']] = $row['salary'];
}
Share:
62,928
scireon
Author by

scireon

Updated on January 04, 2021

Comments

  • scireon
    scireon over 3 years

    I want to create an associative array in php with dynamic key and also a dynamic value from a particular mysql table.

    The table name is monthly_salary with a two column named month and salary respectively.

    I get the data inside it:

    $sql = mysql_query('SELECT * FROM monthly_salary');
    $sql2 = mysql_query('SELECT * FROM monthly_salary');
    

    Then assigned and concatenated the collected data to $mon and $sal:

    $mon = "";
    $sal = "";
    while($row = mysql_fetch_array($sql)){
        $mon .= $row['month'].", ";
    }
    while($row = mysql_fetch_array($sql2)){
        $sal .= $row['salary'].", ";
    }
    

    After that I've converted it to array and concatenate it until it became and associative array:

    $monArray = array(substr(trim($mon), 0, -1));
    $salArray = array(substr(trim($sal), 0, -1));
    $key = "";
    $keyWithVal = "";
    foreach($monArray  as $k){
        $key .= $k." => ";
    }
    foreach($salArray  as $k){
        $keyWithVal .= $key.$k.",";
    }
    
    $associativeArray = array(substr(trim($keyWithVal), 0, -1));
    

    My Problem is that when I've echo it the result is always like this 3500=>Jan=>3500:

    foreach($associativeArray  as $k => $id){
        echo $k."=>".$id;
    }
    

    So how can I fix it and with the correct output Jan=>3500?

  • Strixy
    Strixy over 11 years
    To show the association, instead of using a loop, you could do echo "<pre>"; print_r($associativeArray);
  • nickb
    nickb over 11 years
    What is the difference between this answer and the one provided by Rocket Hazmat?
  • DiscoInfiltrator
    DiscoInfiltrator over 11 years
    None, we just posted at the same time. He/she beat me to it.
  • gen_Eric
    gen_Eric over 11 years
    @Strixy: True, I was just copying the code from the question.
  • gen_Eric
    gen_Eric over 11 years
    @DiscoInfiltrator: That's because I'm a ninja ^^