PHPでライフスタイルのような種類のブログを構築しています。それは私のブログデータベース、私のつぶやきと私のLast.fmのscrobblesだけでなく、私のMySQLデータベースから取得します。配列要素を1つの点にまとめることで、ある点まで
これまでのところとても良いですが、複数の後続のscrobblesを1つにまとめたいのですが。しかし、すべてが時系列のままでなければならないので、ブログの投稿やツイートが連鎖を壊した場合、連鎖の第2部分は最初の部分と結合してはならない。
Array
(
[0] => Array
(
[contents] => Disturbed
[type] => scrobble
[published] => 1327695674
)
[1] => Array
(
[contents] => Amon Amarth
[type] => scrobble
[published] => 1327695461
)
[2] => Array
(
[contents] => Apocalyptica
[type] => scrobble
[published] => 1327693094
)
[3] => Array
(
[contents] => This is a tweet. Really.
[type] => tweet
[published] => 1327692794
)
[4] => Array
(
[contents] => Dead by Sunrise
[type] => scrobble
[published] => 1327692578
)
)
したがって、[3]はツイートであるため、1つの要素にまとめてください。タイムスタンプ[published]は、結合された要素の最新のものに設定され、[contents]文字列はコンマを使用してまとめられます。しかし、[4]は組み合わせの一部ではありません。それは物事の時系列的順序を破るからです。
あなたはまだ私と一緒です:私は反復と条件などの負荷を使用することができると思いますが、パフォーマンスを考慮して処理する方法についてはわかりません。私が使用できる配列固有の関数はどれですか?出力配列に追加し、各エントリの上にループ
$last_type = '';
$out = array();
foreach ($events as $row){
if ($last_type == 'scrobble' && $row['type'] == 'scrobble'){
array_pop($out);
}
$out[] = $row;
$last_type = $row['type'];
}
:これは仕事をしていません
$lastType = "";
$count = 0;
foreach($arrays as $array) {
switch($array["type"]) {
case "scrobble":
if($lastType == "scrobble")
$count++;
else {
$count = 1;
$lastType = "scrobble";
}
break;
case "tweet":
// same as above
break;
}
}
これは、アーティストが1つのエントリに複数回出現するのを防ぐために、array_unique()を簡単に行うことができるようになりました。ありがとう! –