PHPには配列を操作する関数がたくさんあるのでちょっとずつ試していこうかとおもいます。
はじめてのperlを読んでて perlでは配列の最後を取り出すのに
@rray = (a b c); print @rray[-1];
とすればいいらしい。 PHPでもできるかなと思ったけどできなかった。
PHPの場合は
$a = array("a", "b", "c");
echo end($a);
となる。つい最近までend()使ってなかったですね。 ずっと
$a = array("a", "b", "c");
echo $a[count($a) - 1];
という風にやってました。恥ずかしい。
8割使ったことない感じ。実は便利な関数あるかもなのでちょっとずつ試していきます。
$input のすべてのキーを小文字あるいは大文字にした配列を返します。 数値添字はそのままとなります。
ハッシュに対して利用する。
$a = array("Zero" => 0, "One" => 1, "two" => 2);
var_dump(array_change_key_case($a));
echo "<hr />";
var_dump(array_change_key_case($a, CASE_UPPER));
echo "<hr />";
$b = array("test" => "php", "Test" => "Php", "TEST" => "PHP");
var_dump(array_change_key_case($b));
処理の結果keyが同じものはより後ろの値が上書きされる。 んーこれはあまり使いそうもなさそう。
配列を、size 個ずつの要素に分割します。 最後の部分の要素数は size より小さくなることもあります。
サンプルのまんま。
$a = array("a", "b", "c", "d", "e");
$b = array("Zero" => 0, "One" => 1, "two" => 2, "three" => 3, "four" => 4);
var_dump(array_chunk($a, 2));
echo "<hr />";
var_dump(array_chunk($a, 2, true));
echo "<hr />";
var_dump(array_chunk($b, 2));
echo "<hr />";
var_dump(array_chunk($b, 2, true));
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
[1] => d
)
[2] => Array
(
[0] => e
)
)
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[2] => c
[3] => d
)
[2] => Array
(
[4] => e
)
)
Array
(
[0] => Array
(
[0] => 0
[1] => 1
)
[1] => Array
(
[0] => 2
[1] => 3
)
[2] => Array
(
[0] => 4
)
)
Array
(
[0] => Array
(
[Zero] => 0
[One] => 1
)
[1] => Array
(
[two] => 2
[three] => 3
)
[2] => Array
(
[four] => 4
)
)
ハッシュの場合、trueを指定しないとkeyが失われる。 これもうまい使いどころが思い浮かばない。tableとかHTMLと絡ませて出力する時、使えるかも?
keys 配列の値をキーとして、また values 配列の値を対応する値として生成した配列を作成します。
$keysと$valuesの要素数は同じでなければならない。
/* サンプル */
$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");
$c = array_combine($a, $b);
print_r($c);
echo "<hr />";
/* Stringと配列 */
$a = array("green", "red", "yellow");
$b = array($a, $a, $a);
$c = array_combine($a, $b);
print_r($c);
echo "<hr />";
/* 配列とString */
$a = array("green", "red", "yellow");
$a = array($a, $a, $a);
$b = array("avocado", "apple", "banana");
$c = array_combine($a, $b);
print_r($c);
echo "<hr />";
/* 配列と配列 */
$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");
$a = array($a, $a, $a);
$b = array($b, $b, $b);
$c = array_combine($a, $b);
print_r($c);
Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)
Array
(
[green] => Array
(
[0] => green
[1] => red
[2] => yellow
)
[red] => Array
(
[0] => green
[1] => red
[2] => yellow
)
[yellow] => Array
(
[0] => green
[1] => red
[2] => yellow
)
)
Array
(
[Array] => banana
)
Array
(
[Array] => Array
(
[0] => avocado
[1] => apple
[2] => banana
)
)
$keyの要素がArrayの場合、添字はArrayとなる。
下記のようなコードは書いたことある気がする。 これは使うことあるかも。
$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");
$c;
if (count($a) == count($b)) {
for ($i=0; $i<count($a); $i++) {
$c[$a[i]] = $b[$i];
}
return $c;
} else {
$c = false;
}
配列 input の値をキーとし、 input におけるその値の出現回数を値とした配列を返します。
string あるいは integer 以外の型の要素が登場するたびに E_WARNING が発生します。
$a = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($a));
echo "<hr />";
$b = array("Zero" => 0, "One" => 0, "two" => "test", "three" => "test", "four" => "hoge");
print_r(array_count_values($b));
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
Array
(
[0] => 2
[test] => 2
[hoge] => 1
)
値に対しての処理なのでハッシュでもOK。 これは重複チェックに使えるのか。
まだまだ先は長い・・・
/ 金額 : ¥ 3,780
/ 金額 : ¥ 2,940
1-5
6-10