我在爆炸阵列和使用它时遇到了问题。 我有一系列分类为已读和未读书籍的书籍序列号。 什么时候有读的书我把这个序列号后面的数据读入如下。
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
任何帮助将不胜感激。
答案 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>";
}
}
}