使用动态键和值在php中创建关联数组

11
我想在PHP中创建一个关联数组,其键和值都是从特定MySQL表中动态获取的。
表名为“monthly_salary”,具有两个列分别命名为“month”和“salary”。
我从其中获取数据:
$sql = mysql_query('SELECT * FROM monthly_salary');
$sql2 = mysql_query('SELECT * FROM monthly_salary');

然后将收集到的数据分配并连接到 $mon$sal

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

之后,我将其转换为数组,并进行串联,直到它成为一个关联数组:

$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));

我的问题是,当我输出时结果总是像这样3500=>Jan=>3500

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

那么我该如何修复它并得到正确输出Jan=>3500


5
为什么您要运行相同的SQL查询两次? - gen_Eric
你期望 array(substr(trim($mon), 0, -1)) 做什么?这只是将字符串转换为数组,它会给你一个只有一个元素的数组。array('1, 2, 3') 不会创建一个有三个元素的数组,而是创建了一个只有一个元素的数组,即字符串 '1, 2, 3'。如果要将字符串转换为数组,请使用 explode$array = explode(', ', '1, 2, 3); - gen_Eric
3个回答

35

你正在过度复杂化这个问题。 可以简单地完成此操作,使用更少的循环。

首先,只需要运行SQL一次。 其次,在第一个循环中构建数组即可。

$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;
}

为了展示关联数组,你可以使用以下代码,而不是使用循环: echo "<pre>"; print_r($associativeArray); - Strixy
@Strixy:没错,我只是在复制问题中的代码。 - gen_Eric

7
为什么不直接这样做:
$associativeArray = array();
while($row = mysql_fetch_array($sql)){
    $associativeArray[$row['month']] = $row['salary'];
}

这个答案和Rocket Hazmat提供的答案有什么区别? - nickb
5
没有,我们同时发帖了。他/她比我更快。 - DiscoInfiltrator
6
那是因为我是忍者 ^^ - gen_Eric

0

以下是我用于创建关联数组的方法。array_push 不适用于关联数组,但使用一元运算符确实有效:

$associativeArray += [$key => $value];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接