0

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>
<?
4

7 に答える 7

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
于 2012-12-09T20:07:33.863 に答える
1

問題のコードは次のことを実行しています。

オカレンス値キーごとに、ユーザーを指定します。

私はあなたが反対の行動をとっていると思います:

ユーザーキーごとに、オカレンス値を指定します

交換$occurrencesしてみてください$users。つまり、通話中です。

array_combine($users, $occurrences)

user2 しか表示されない理由は、array_combine がエントリを考慮し、キー リストとして0 => 0 and 1 => 0受け取るためです。0 0したがって、結果の配列ハッシュで生成できるキーは 1 つだけです (キー リストを作成するために、occurrences 配列の値を使用しています)。

于 2012-12-09T20:11:48.870 に答える
0

キーが単に数字に従っているだけなのに、なぜ連想配列を使用しているのですか?

これは私のために働いた:

<?php 
$user = array('user1','user2');
$occur = array(0,0);

foreach (array_combine($user, $occur) as $key => $value) {
    echo $key . " : " . $value;
}
 ?>
于 2012-12-09T20:10:13.867 に答える
0

両方の値が 0 の場合

次に、2 つの異なる値に対して 2 つの同じキーがあり、最初の値を 2 番目の値で上書きします。したがって、配列には値が 1 つだけ存在します。

于 2012-12-09T20:11:04.317 に答える
0

PHP はを結合$occurancesして、結果の結合配列の配列キーとして使用します。0値として 2 回指定したため、user2は常に配列の最初の位置を想定します。

あなたのソリューションでは、これは良くないでしょうか:

foreach($occurances as $userindex => $occurs)
{
    echo '<tr><td>'.$users[$userindex].'</td><td>'.$occurs.'</td></tr>';
}
于 2012-12-09T20:11:38.953 に答える
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
}
?>
于 2012-12-09T20:01:26.557 に答える
-1

しない理由

if(count($occurrences)==count($users)){
    foreach($occurences as $k, $v){
        ?><tr><td><? echo $users[$k]; ?></td><td><? echo $v; ?></td></tr><?
    }
}

両方の配列のサイズが一致することを確認し、目的の出力を実現します。

于 2012-12-09T20:09:57.543 に答える