0
Help us understand the problem. What are the problem?

posted at

updated at

RubyとPHPの比較(条件分岐、配列、ハッシュ)

この記事の概要

Rubyで学習を始めてPHPに言語チェンジをする人が一定数いるみたいなので
そういった人達が参考にするための記事です。

こちらの記事の続きです。
https://qiita.com/Hashimoto-Noriaki/items/82beae9d3d6dac11e11c

比較

演算子などを使った比較の方法をみていきます。

PHPで値を調べる

var_dumpを使うと値の解析ができます。

var_dump(10);
var_dump("10");

//int(10)
//string(2) "10" と出力

initは数値のことで、stringは文字列のことです。
stringの後の(2)は文字数のことです。

条件式

数値などを比較をする時には使う条件式をRubyとPHPで比較しながら見ていきます。
==は比較したものが等しいかをチェックします。

⚫︎Ruby

puts 100 == 100
puts 100 == 1000

#true
#falseと出力

⚫︎PHP

var_dump(100 == 100);
var_dump(100 == 1000); と出力

//bool(true)
//bool(false)

bool型true(正しい)かfalse(正しくない)を表す型です。

比較演算子

比較記号のことを比較演算子と言いますが、RUbyもPHPも共通です。

x == y  #両者が等しいか
x < y   #xよりyが大きい
x <= y  #x以上
x >= y  #x以下
X!= y   #xとyは違う

PHPで型を比較する

PHPでの型の比較方法を見ていきます。
型の比較では ===を使います。

var_dump(100 == "100");
var_dump(100 === "100");

//bool(true)
//bool(false)

==の場合型の比較はしないのでtrueになっています。
===の場合型の比較をするのでfalseになっています。

Rubyで調べてみたらこのような機能はなかったです。

if文(条件分岐)

if文を使った条件分岐(これはもし〜なら〜で処理するみたいな仮定法みたいな文)
を見ていきます。
if-elseif-elseを使ったポケモンのレベルに関するif文を見ていきます。

⚫︎Ruby

pokemon_level = 70

if pokemon_level >= 80
    #レベル80以上
    puts  "めっちゃ強い"
 elsif pokemon_level >= 50
    #レベル50以上
    puts  "強い"
 elsif pokemon_level >= 30
    puts  "普通"
else 
    #レベルが30に行かないポケモン
    puts "弱い"
end

#レベル70なので強いと出力

⚫︎PHP

$pokemon_level = 70;

if($pokemon_level >= 80){
    //レベル80以上
    echo "めっちゃ強い";
} elseif ($pokemon_level >= 50){
    //レベル50以上
    echo "強い";
} elseif ($pokemon_level >= 30){
    echo "普通";
}else {
    //レベルが30に行かないポケモン
    echo "弱い";
}

//レベルが70なので今回は強いと出力

条件分岐をRubyとPHPで比較

Rubyと比べてPHPは{}や()if文やelseの後に入れたり、
elsifがelseifになったりRubyではendをつけたり
違いがあります。

条件式の記号

条件式の記号の使い方もみていきます。

まずAND条件&&からです。

⚫︎Ruby

puts 50 <=  i && i < 80
#どちらも trueなのでtrue
#そうでない場合はfalse

⚫︎PHP

50 <=  $i && $i < 80

どちらも trueならtrueでそうでない場合はfalseになります。

次にOR条件||を見ていきます。

⚫︎Ruby

a < 100 ||  b < 100

⚫︎PHP

$a < 100 ||  $b < 100

どれかがtrueならtrueになります。全てfalseならfalseになります

配列

次に配列を見ていきます。

⚫︎Ruby

animal = ["犬","猫","猿","ライオン"]
puts  animal[0] #犬が出力

⚫︎PHP

$animal = ["犬","猫","猿","ライオン"];
echo $animal[0]; //犬が出力

ハッシュ(連想配列)

次にハッシュ(連想配列)を見ていきます。

⚫︎Ruby

language = {"lan1" =>"日本語","lan2" => "英語","lan3" => "中国語","lan4" => "フランス語"}
puts language["lan1"] #日本語と出力

⚫︎PHP

$language = ["lan1" =>"日本語","lan2" => "英語","lan3" => "中国語","lan4" => "フランス語"];
echo $language["lan1"]; //日本語が出力

補足

lan1などのkeyの部分は自分や他の人がわかりやすいもので、自由に選べます。
key1などでだとわかりやすそうですね。
ちなみに文字列の部分はvalueです。

Rubyのシンボル

⚫︎Ruby
連想配列の書き方でシンボルという文字列を:にして簡単に書けるようにしたものです。
毎回""をつけるとめんどくさいのでこのように簡略化した書き方もあります。

language = {:lan1 =>"日本語",:lan2 => "英語",:lan3 => "中国語",:lan4 => "フランス語"}
puts  language[:lan1] #日本語と出力

こっちの書き方でも可能です。

language = {lan1: "日本語",lan2:  "英語"}
puts language[:lan1] #日本語と出力

PHPでもこの書き方を試したのですが、シンボルに書けなかったです。
もし知っている方がいたら教えてください。

いろんな書き方

いろんな配列の書き方を見ていきます。

1.多次元配列
配列の中に配列が書けます。

⚫︎Ruby

 [[100],[200]]

⚫︎PHP

[[100],[200]];

2.配列の中にハッシュ
配列の中にハッシュを入れることができます。

⚫︎Ruby

[{"key1" => "Ruby"}]

⚫︎PHP

[["key1" => "PHP"]];

3.ハッシュの中に配列
ハッシュの中に配列を入れることができます。

⚫︎Ruby

{"key1" => ["Ruby"]}

⚫︎PHP

["key1" => ["PHP"]];

実務に入った時にこんな感じの書き方を実際見ました。

繰り返し処理

eachなどを使った繰り返し処理を見ていきます。

each文とforeach文

⚫︎Ruby

language  = ["日本語","英語","中国語","フランス語"]
language.each do |lang|
    puts  lang
    end
#日本語
#英語
#中国語
#フランス語 と出力

⚫︎PHP

$language = ["日本語","英語","中国語","フランス語"];
foreach($language as $lang){
    echo $lang;
};
//日本語
//英語
//中国語
//フランス語 と出力

each文の両者の違い

Rubyeachを使いますが、PHPforeachを使います。
それぞれの書き方も異なってくるので比較します。

⚫︎Ruby

配列.each do |変数|
#ループ処理
end

⚫︎PHP

foreach($配列 as $変数){
//ループ処理
}

両者を比較するとだいぶ書き方が違いますね。

ハッシュの繰り返し処理

⚫︎Ruby

language = {"佐藤" =>"日本語","マイク" => "英語","王" => "中国語","エマ" => "フランス語"}

language.each do |key,value|
    puts "#{key}さんは#{value}が話せます。"
end
#佐藤さんは日本語が話せます。
#マイクさんは英語が話せます。
#王さんは中国語が話せます。
#エマさんはフランス語が話せます。  と出力

⚫︎PHP

$language = ["佐藤" =>"日本語","マイク" => "英語","王" => "中国語","エマ" => "フランス語"];
foreach ($language as $key => $value){
  echo "{$key}さん{$value}が話せます。";
}
//佐藤さんは日本語が話せます。
//マイクさんは英語が話せます。
//王さんは中国語が話せます。
//エマさんはフランス語が話せます。 と出力

putsとechoで出力する時に、変数を出力する時に#を使うか使わないかの違いがあります。
他は上の繰り返し処理と同じです。

ループ処理のスキップ(nextとcontinue)

普通のループ処理だと変数の中身がそのまま出力されますが、
RubynextPHPcontinue
使うとループ処理のスキップができます。

例えば中国語を出力させないでループ処理をする場合を見ていきます。

⚫︎Ruby

language = ["日本語","英語", "中国語", "フランス語"]
language.each do |lang|
     next if lang ==  "中国語"#lang == "中国語"がtrueならnextを実行
     puts lang
end
#日本語
#英語
#フランス語 と出力

⚫︎PHP

$language = ["日本語","英語","中国語","フランス語"];
foreach($language as $lang){
    if($lang == "中国語"){
        continue;
    }
    echo $lang;
}
//日本語
//英語
//フランス語 と出力

書き方がそれぞれ違うので確認していきましょう。

参考資料

下の動画を元に作成しています。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?