php循环和控制流程

时间:2015-10-09 09:18:50

标签: php loops if-statement

我在爆炸阵列和使用它时遇到了问题。 我有一系列分类为已读和未读书籍的书籍序列号。 什么时候有读的书我把这个序列号后面的数据读入如下。

array(
"1234567890","read",
"2345678901","read",
"2345678901",
"2345678901",
"1234561231",
"3333333333","read",
"3333333333"
)

状态对于所有其他人都是未读的,在输出中我想循环遍历数组给我这个结果。

1234567890: 0 unread, 1 read
2345678901: 2 unread, 1 read
1234561231: 1 unread, 0 read
3333333333: 1 unread, 1 read

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

第一次你拥有的阵列不是以最好的方式构建的,更好的是:

 $arr = array(
 "1234567890","read",
 "2345678901","read",
 "2345678901","unread"
 )

但你可以这样做:

$idx=count($arr);
$collector=array();
for($i=0;$i<$idx;$i++){
 if($arr[$i]==='read') continue;
 if(!isset($collector[$arr[$i]])){
  $collector[$arr[$i]]=array(0,0);#array(read,unread)
 }
 if($arr[$i+1]==='read'){
   $collector[$arr[$i]][0]++;
 } else {
   $collector[$arr[$i]][1]++; 
 }
}

#print it
foreach($collector as $id => $data){
  print "$id: {$data[0]} read , {$data[1]} unread<br>".PHP_EOL;
}

但最好尝试以更好的方式收集数据!!!

答案 1 :(得分:0)

改为使用多维数组:

<?php
$arrBooks = array(
"1234567890" => array(
"read"=>'1',
"unread"=>'0'),
);
foreach ($arrBooks as $obj_key =>$book)
{
echo "$obj_key:<br>";
foreach ($book as $key=>$value){
echo "$key: $value<br>";
}
echo "<br>";
}

通过这种方式,您可以轻松地遍历密钥并相应地获取数据。

如果您还想更新数组,请输入以下代码:

foreach ($arrBooks as $obj_key =>$book)
{
if($obj_key=="1234567890")
{
foreach ($book as $key=>$value){
    if($key=="read")
    {
        $value+=1;
        }
    echo "$key: $value<br>";
}
}
}