PHP循环和控制流


php loop and control flow

我在爆炸数组和工作的问题。我有一个分类为已读书籍和未读书籍的序列号数组。当有书被读取时,我将read放在数组的序列号后面,如下所示。

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

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

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

当你的数组不是以最好的方式构建时,更好的方法是:

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

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

使用多维数组代替:

<?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>";
}
}
}