我在爆炸数组和工作的问题。我有一个分类为已读书籍和未读书籍的序列号数组。当有书被读取时,我将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>";
}
}
}