我正在尝试使用foreach循环显示2个数组,但出于某种原因,当数组中的值设置为0时,只显示数组的最后一项
说我有以下数组值:
users array ( 0 => user1, 1 => user2)
occurrences array ( 0 => 0, 1 => 3) //the key represents the user from the users array
foreach循环的输出将正确显示
//output
user1 0
user2 3
但是,如果两个值均为0,则仅显示user2
users array ( 0 => user1, 1 => user2)
occurrences array ( 0 => 0, 1 => 0); //the key represents the user from the users array
//output (should also display user1 0)
user2 0
这是我的foreach循环。
?>
<table>
<th>User</th><th># of Occurrences</th>
<?
foreach (array_combine($occurrences, $users) as $occur => $user){
?>
<tr><td><? echo $user; ?></td><td><? echo $occur; ?></td></tr>
<?
}
?></table>
<?
答案 0 :(得分:1)
$users = array(1 => 'user2', 0 => 'user1');
$occurences = array(0 => 0, 1 => 3);
$count = count($users);
$result = array();
for($i = 0; $i < $count; $i++)
{
$result[$users[$i]] = $occurences[$i];
}
var_dump($result);
注意$ users数组顺序。使用array_combine,在这种情况下你会得到错误的值。
array (size=2)
'user1' => int 0
'user2' => int 3
我无法重现你的意思:
var_dump(array_combine([0 => 'user_1', 1 => 'user_2'], [0 => 0, 1 => 0]));
结果:
array (size=2)
'user_1' => int 0
'user_2' => int 0
答案 1 :(得分:1)
问题中的代码执行以下操作:
对于每个出现值键,请提供用户。
我会想象你是在追求相反的行为:
对于每个用户密钥,请提供出现值
尝试在通话中交换$occurrences
和$users
,即
array_combine($users, $occurrences)
您只看到user2的原因是array_combine考虑条目0 => 0 and 1 => 0
并将接收0 0
作为键列表。因此,它只能在结果数组哈希中生成一个键(它使用occurrence数组中的值来构建键列表)。
答案 2 :(得分:0)
尝试以某种方式这样做:
<?php
foreach($users as $userId => $userName) {
if(isset($occurrences[$userId])) {
?>
<tr><td><?php echo $userName; ?></td><td><?php echo $occurrences[$userId]; ?></td></tr>
<?php
}
?>
答案 3 :(得分:0)
如果您的密钥只是跟随数字,为什么使用关联数组?
这对我有用:
<?php
$user = array('user1','user2');
$occur = array(0,0);
foreach (array_combine($user, $occur) as $key => $value) {
echo $key . " : " . $value;
}
?>
答案 4 :(得分:0)
如果两个值均为0
然后,您有两个相同的键用于两个不同的值,并用第二个值覆盖第一个值;因此,在数组中,只有一个值
答案 5 :(得分:0)
PHP将$occurances
中的值组合起来用作结果组合数组中的数组键。由于您已将0
指定为值两次,因此user2
将始终采用数组中的第一个位置。
对于你的解决方案,这不会更好:
foreach($occurances as $userindex => $occurs)
{
echo '<tr><td>'.$users[$userindex].'</td><td>'.$occurs.'</td></tr>';
}
答案 6 :(得分:-1)
为什么不
if(count($occurrences)==count($users)){
foreach($occurences as $k, $v){
?><tr><td><? echo $users[$k]; ?></td><td><? echo $v; ?></td></tr><?
}
}
确认两个阵列的大小匹配,然后达到所需的输出。