配列置換問題へのトラックバックありがとうございました!

  • 2009/02/10(火) 00:00:00

祝電

にぽたんさん、お誕生日おめでとうございました(・∀・)



配列置換の答えはひとつじゃないーの巻

配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。

初心者向けPHP練習問題リンク+学習ログ

先日のエントリ内で紹介した 「配列いじり」 について、”自分ならこう書く” というトラバをいただきました!
すごく嬉しい。ありがとうございますっ!!


$len = count($num);
$new_num = array_fill(0, $len - 1, 0);
array_unshift($new_num, $num[0]);

配列numの要素数を調べて、そこから-1した数だけ0で埋めた配列を作り、
配列numの先頭の要素をarray_unshiftで配列new_numの先頭に追加すれば完成。

配列の先頭以外の要素を0に置き換え - 243 inari 様

そうか、そういう考え方もあるのか。エンジニアの数だけ発想があるんだなぁ。
というのは言いすぎかもしれないけどw なんというか、純粋に面白いと思った。


$after = array_pad(array($before[0]), count($before), 0);

問題の意図は、「配列内の数字がどんな値であっても先頭の数値以外はすべて0にする」
ってことだと思いますよ。

「配列いじり」のコマンドライン版を作ってみた - 積み重ねた日々 様

array_pad!なんとビンゴの関数が!!
最初にトラバくれた ilo さんも、追記で「array_padの方がわかりやすいな〜」と書いていた。
そして、我らが(?)ギークなバスケットマンも array_pad を使っている。


$after = array_pad( array($num[0]), count($num), 0);

マニュアルをよく見ると適した関数とか見つかっていいよね。
array_padとか覚えておく類の関数じゃないしね・・。

人のコードを見ることは大事だよね - ito.tetsunosuke/notebook 様

?な!array_pad は覚えておく関数じゃないのか!
必要なときにマニュアルで検索すればおk、ってことか。マニュアルと仲良くしよう。


@(error surpression)はあんまり推奨しないかなあって感じ。
何より、@fileとかで開けなかった場合の後の処理を考慮していないのがいまいち。


エラーを無視するエラー制御演算子を多用するのはイクナイとのご指摘。
ふむ。どこでエラーが発生したか分からなくなるから気をつけろ!と、Saity先生が言ってた気がする。
# 違うサイトだったかも、ここでそう読んだ気がするが自信無い。


3人が使っている implodejoinimplode()関数のエイリアス)。
最初、「え!逆じゃない? implode(連結文字列,配列要素) なのでは!?」とテンパったが、
マニュアルをよく見たら注意書きがあった。

注意: implode()は、歴史的な理由により、引数をどちら の順番でも受けつけることが可能です。

PHP:implode - Manual

ブラウザで両方試してみたら、確かにどちらを先にしても結果は同じ。そうかー。そうなのかー。



あ。カテゴリが [コメント欄より] になってるけど気にしないでくださいね!
[コメント・トラバより]に変えようかな・・・ううむ。


LINEで送る

Geekly News@2009年02月06日

  • 2009/02/06(金) 12:00:00

日記

今夜はアイツとデート。



更新情報

Sleipnir開発者の柏木さんを追加しました!
yasuyuki(やすゆき 、本名:柏木泰幸)

ぷにる一筋の私だけど、まさか開発者の方がこんなにもユーザーのことを考えてくれているなんて
知らなかった。片思いじゃなかったのね・・・
この人は本当に、ユーザーを大切にする人。調べれば調べるほど、それが深く伝わってきて嬉しかった。
ストーキング力に定評がある私が言うんだから間違いないよ!惚れ直しましたぷにるらぶ|´∀`●)



ギークな話題

01月30日(金)
[hiroyuki]ひろゆきさん、大人の役割について一言

[ats]淳さん、@ITに「Python 3が後方互換性を捨ててでも求めたもの」という記事を寄稿
「みなさま是非お読み下さい:-D。」
# このギークが使う顔文字についてあとで書く (<:-D)


01月31日(土)
[tokuhirom]ブログを書く若いプログラマへ
「良質なエントリを書け ・ 良質なコードを書け ・ 勉強しろ」

[higayasuo] ひがさんはいつもチャレンジャー
「大事なことなので、何度も繰り返しておきますよ。」

[jj1bdx]力武さん、第1回Python旅館に参加
「これだけの集中力を保っていられるのは,このイベントが禁酒だからであろう.」

[nari]祝!Ruby1.9.1リリース!
「開発者の皆さんお疲れ様でした.」

[higayasuo] SAStruts 1.0.4-sp4リリース


02月01日(日)
[itomasa]不動産業界が景気変動に弱い理由
「『時間』というファクターがけっこう効いているんだろう。」

[yusukebe]ゆーすけべーさん、大親友の「ありがとう」という言葉に感動
「今度は俺が「ありがとう」を言う番だ。」

[yappo]やっぽさん、やさぐるまの真の素晴らしさを語る
「来週までにカブトのDVDを全部買って予習すべきだと思う。」
# 私の友達は携帯にステッカーを貼るくらい仮面ライダーが大好きです。

[higayasuo] 進化し続けることはオープンソースにとって必須なわけではない
「ユーザは、安定性を求めるものです。」

[Matz]まつもと家の頑固な末娘
「恥ずかしいからよしなさい。」

[mari]2009年01月の人気珍スポットベスト10
「【1位】まんこ祭り2007『豊年祭・大縣(おおあがた)神社』」

[HolyGrail] HolyGrailさん、Blu-rayレコーダーを購入
「これからは深夜アニメのために夜更かしすることなく健康的な生活が送れそうですね!」

[dankogai] perl - Encode-2.29 リリースのお知らせ
「2.28はPAUSEのアップロードエラー対策のため欠番となります。」


02月02日(月)
[Matz]まつもとさん、初めてのMacBook Proの印象
「・わかりやすい ・わかりにくい ・わからない」


02月03日(火)
[dankogai] GDPを一日で倍にする方法
「あっという魔にGDPは倍になりました。」

[higayasuo] 老害に引退をお願いするのではなく引き摺り下ろす
「問題があれば、自分から行動するしかないのです。」


02月04日(水)
[higayasuo] 実力をつけるための脱職業プログラマのすすめ
「自分の書きたいコードを書いていれば、書いた分だけ成長するはず。」

[higepon]ひげぽんさんが Gauche の ML で 見掛けた「Boy」 の意味
「知らなかったな。」

[ats]淳さん、「朝すっきり目覚まし」の効果に感激
「もっと早めに買ったら良かったかも:-)。」

[HolyGrail] HolyGrailさんが家電製品をSonyで揃えたいたった一つの理由


02月05日(木)
[sato]佐藤さん、ヤフーモバイルの新しい広告枠に興味
「(多分仕掛けてくるだろう)」

[nari]SpecialWarningというプラグインをリリース

[おまけ]]Geekと話していてもつまらない。
「面白いなと言える活動をしている人はサスペンダーじゃないことが多い。」



大事なことなのでもう一度言います。
ぷにるらぶ!


LINEで送る

初心者向けPHP練習問題リンク+学習ログ

  • 2009/02/04(水) 00:00:00

日記

もうすぐにぽたんの誕生日なので本気出す。



PHPの基本を復習しよう

自分は今まで参考書とGoogleを頼りにコードを書いていたが、
何かを見ながらだとなかなか覚えないよね><

ある程度、基礎的なことを理解したら(ってまだ理解してないんだけどドント・マインド)、
計算ドリル的なノリで、1000本ノックをするべし!するべし!!

で、PHPの簡単な練習問題を探してみた。
私はとても役に立ったので、PHPを勉強中の初心者の方には是非&ぜひオススメしたい!
以下、易しい順にリンク張っておくにょ。


PHP基礎問題集(PreAlphaVersion) - 初心者のプログラミング体験記
# 基本中の基本をシンプルに復習。
 もうちょい難易度が高い練習問題もあるけど、私はそっちはやってないw

練習問題 - プログラミングスレまとめ in VIP
# これはなんとPHPの解答例が載っていないというまさかの村八分( ;Д;)

【お題】PHP学習課題スレ【出せや】 - WEBプログラミング@2ch掲示板
# これは良かった。
 疲れたときの3時のおやつには 『今の自分の心境をPHPで表すスレ』 がイイ!

新しくプログラミング言語を覚えたいときに行うべき10の練習問題 - IDEA*IDEA
# ひゃ!



復習を兼ねた感想など(長いので適当にスルーしてくださいナ)

配列いじり † (練習問題 - プログラミングスレまとめin VIP)
配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。

例: 置換前 3 5 2 4 2

   置換後 3 0 0 0 0



べにぢょの答え

<html>
<head>
<title>PHP練習問題 - 配列いじり</title>
</head>
<body>

<?php

$num = array(3,5,2,4,2);
foreach($num as $line){
echo $line;
}

echo "<br>";

$change = array(5,2,4);

$new_num = str_replace($change,0,$num);

foreach($new_num as $line){
echo $line;
}
?>

実行結果: 配列いじり - PHP練習問題

私の解釈は、出題者の意図とちと違っているような・・・。
確かに相違なく表示されているが、この問題ではこの方法の理解が問いたかったのだろうか?
うーむ。.....まぁいいか!!


一言メッセージ×10行のチャット、名前入力必要なし。 【お題】PHP学習課題スレ【出せや】 の >>11)

これは分からなかったので、>>12の解答をググりながら解釈。

<?php
$log = @file('chat.log');
 //chat.logを読み込んで$logに代入

if(!is_array($log)){ 
//$logが配列じゃなかったら
$log = array(); 
//配列にする
}

if(isset($_POST['monolog'])){ 
//$_POST['monolog']がセットされていたら
array_unshift($log, $_POST['monolog']."<br>"); 
//$logの先頭に$_POST['monolog']を追加

$log = array_slice($log,0,10); 
//$logの0番目から10番目までを取り出す

file_put_contents('chat.log',$log); 
//chat.logに$logを書き込む

header("location:2ch_12.php"); 
//リダイレクト
exit;
}
?>

<html>
<head>
<title>10行チャット - PHP学習課題スレ</title>
</head>
<body>
<p>10行チャット<br>
<form method = "POST" action = "2ch_12.php">
<input type="submit" value="送信">
<input type="text" name="monolog">
</form></p>

<?php
foreach($log as $idx=>$value){ 
//$logの要素を$valueに代入
echo "<hr>".$value; 
//$value表示
}
?>
<hr>
</body>
</html>



スレの解答例にはエスケープなかったけどいいのかな。
それと、ファイルを操作するときはロックをしないとまずいというのをどこかで読んだような・・・
どうなんだろう、この場合は要らないんだろか。
初心者がイキがって余計なことしない方がいいかな><と思ったが、せっかくの機会なので書いてみる。


べにぢょの答え(変更してない箇所は省略)

if(isset($_POST['monolog'])){
$post = htmlspecialchars($_POST['monolog'], ENT_QUOTES);
 //array_unshiftする前にエスケープ
array_unshift($log, $post."<br>");



さて、問題はどこでファイルにロックをかけるかだが・・・
$log = @file('chat.log'); の次はダメだ。
@flock($log,LOCK_SH); としたいところだけど、flock の第一引数はファイルポインタなので、
chat.log の内容を配列で読みこんだ $log は引数にできない。
となると、次にファイルに対してアクションを起こすのは file_put_contents('chat.log',$log);

だがしかし!こやつは開く&書き込むを1人でやってしまうので、止めに入る間がない。
くそぅ・・・万事休すか・・・・っ と思ったら、フラグていうのがあるらしい(゚∀゚)
じゃあ、これでいいのかな?

file_put_contents('chat.log',$log,LOCK_EX);
実行結果: 10行チャット - PHP学習課題スレ

ほ。とりあえずエラーは出ていない。
1人でチャットしながらコード直していったので、記念に貼っておく!

  


あ、そうだ。
下から2番目の「属性なの?」という発言について。
最初、「てすとだ」 とだけ書き込んだ chat.log をサーバーにUPしたのね。
そのあとフォームに 「ハローワールド!」 と入力して送信したんだが、何度リロードしても一向に変化なし。
「おい!聞いてるのか!!!」・・・なんて昔の私だったらキレるところだけど、
実はうすうすできない気がしていた。
アレだろ?パーミッションだろ?やっぱりな!そうくると思ってたぞ。
chat.log の属性を 666 に変えて、「属性なの?」 と入力してみる。
ほらキタ!書けた書き込めた!まいったか!
・・・という知られざるストーリーがあったのだった。とっぴんぱらりのぷぅ。



2ちゃんねるのスレなど見ていて思ったけど、他人が書いたコード見るのってちょっと楽しいね。


LINEで送る