kamenokoki.com

【126日目】人気記事へのリンクを作成したい-3

Posted:  Last Update:

数日前から「人気記事へのリンクをトップページなどに追加する」という課題に挑戦しています。昨日は配列をアクセス数順に並び替えられたものの、18あるはずのURLが8個に集約されてしまうという難問にぶち当たりました。

昨日までの成果

昨日書き直したPHPがこちらです。「$link」という関数に、URLとアクセス数を配列に入れようとしています。

<?php
$str = file("$mypath/top/access.txt");
foreach($str as $value){
$devide = strpos($value, " ");
$length = strlen($value);
$url = substr($value, 0, $devide);
$count = str_replace(" count:", "", substr($value, $devide, $length));
$link[intval($count)] = $url;
}
krsort($link);
foreach($link as $value){
echo $value."<br>";
}
?>

内容は書き出せているのですが、18あるはずのURLが、8個になってしまいました。テストのために「echo」で書き出している画面が下記。8つしかありません。

配列をアクセス数順に並び替える

配列の設定を変えてみる

さて、8個しかURLが書き出せていない理由について少し考えてみました。アクセス数が「2」とか「1」とかのURLがあります。アクセス数をキーに代入しているので、上書きされているのではないかと予想しています。

たとえばアクセス数1の「/article/20201027」を最初に配列に入れて、次にアクセス数1の「/article/20200926」が来た時に、1番と言う番号が同じなので、上書きされてしまう、と。

この予想が正しければ、配列のキーをもう一つ設定するだけで問題は解決しますね。PHPを書き換えてみます。キーを空欄にして、URLとアクセス数を多重配列にしました。

<?php
$str = file("$mypath/top/access.txt");
foreach($str as $value){
$devide = strpos($value, " ");
$length = strlen($value);
$url = substr($value, 0, $devide);
$count = str_replace(" count:", "", substr($value, $devide, $length));
$link[] = [intval($count), $url];
}
krsort($link[0]);
foreach($link as $value){
echo $value[1]." count:".$value[0]."<br>";
}
?>

URLは全部書き出せました!一つの難関クリア!…ただ、順番が変わっていません!

配列の設定を変えてみる

配列を並び替える

配列の順番が変わっていないので、PHPの並び替え「krsort」の部分に工夫が必要そうです。配列の中身で並び替えるPHP関数は何だったか…。検索してみます。「arsort」か「rsort」でいいみたいですね。

<?php
$str = file("$mypath/top/access.txt");
foreach($str as $value){
$devide = strpos($value, " ");
$length = strlen($value);
$url = substr($value, 0, $devide);
$count = str_replace(" count:", "", substr($value, $devide, $length));
$link[] = [intval($count), $url];
}
arsort($link);
foreach($link as $value){
echo $value[1]." count:".$value[0]."<br>";
}
?>

無事に並び替えができました!

配列を並び替える

今日はここまで

おっと、今日はここで時間が来てしまいました。問題が解決できて良かったです。

明日は、この配列をもとに、アクセス数が多い記事のリンクを作成していきます!では、また明日!

記事をシェアする

亀の子に連絡

ランキング参加中!ぽちっとしてね

F2cランキングアイコン 人気ブログランキング ブログランキング・にほんブログ村へ

広告