LoginSignup
0
0

コーディングテスト頻出の内部関数 まとめ(その3 - 配列処理関数)[PHP]

Last updated at Posted at 2024-04-04

この記事の目的

未経験エンジニアが転職活動をする際、最初の難関となるのがコーディングテストです。ここを突破しないと面接にすら進めません。
極度のプレッシャーの中、素早く正確に問題を解くためには、「自分が使っている言語にどのような内部関数があるのか」「どうやって使うのか」などを事前に把握しておくことが必須と言えます。

そこで、コーディングテスト頻出の内部関数の使い方を、使用例を交えてわかりやすく正確にまとめることにしました。
本記事では、配列処理のための内部関数のみを取り上げます。その他の内部関数については、現在に別記事として執筆中です。
(※言語は全てPHPになります)


はじめに

早速ですが、本記事に登場する関数の一覧です。全部で17個の関数を取り上げます。

1.  implode		    配列要素を任意の文字列で連結する

2.  array_push      & 配列の末尾に要素を追加する
3.  array_pop       & 配列の末尾から要素を1つ取り除く
4.  array_unshift   & 配列の先頭に要素を追加する
5.  array_shift     & 配列の先頭から要素を1つ取り除く
6.  array_merge     ひとつまたは複数の配列をマージする
7.  unset           & 変数または配列の要素を削除する

8.  array_slice     配列の一部を切り取った配列を返す
9.  array_splice    &  配列の一部を削除し、他の要素で置換する

10. array_reverse   要素を逆順にした配列を返す
11. sort            & 配列を値の昇順にソートする
12. rsort           & 配列を値の降順にソートする
13. ksort           & 配列をキーの昇順にソートする
14. krsort          & 配列をキーの降順にソートする

15. in_array        配列に値があるかチェックする(返り値はboolean)
16. array_search    指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す
17. array_keys      配列の全てのキー、または一部のキーを返す(ヒットした全てのキーを配列で返す)

本題

それでは、1つずつ順に解説していきます。

1. implode : 配列要素を任意の文字列で連結する

スクリーンショット 2024-04-04 21.43.02.png
スクリーンショット 2024-04-04 21.43.14.png

// 使用例
$array = ['lastname', 'email', 'phone'];

var_dump(implode(",", $array));     // string(20) "lastname,email,phone"

// 空の配列を使うと空文字列となる
var_dump(implode('hello', []));     // string(0) ""

// 第1引数 $separator を省略した場合は空文字で連結する 
var_dump(implode(['a', 'b', 'c']));  // string(3) "abc"

2. array_push : & 配列の末尾に要素を追加する

スクリーンショット 2024-04-05 2.17.12.png

// 使用例
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");

print_r($stack);
// 出力結果は以下の通り
// Array
// (
//     [0] => orange
//     [1] => banana
//     [2] => apple
//     [3] => raspberry
// )

第1引数 $array参照渡しなので注意。

戻り値
処理後の配列の中の要素の数を返す。

もし配列にひとつの要素を加えるために array_push() を使用するなら、 関数を呼ぶオーバーヘッドがないので、
 $array[] =
を使用するほうが良い。


3. array_pop : & 配列の末尾から要素を1つ取り除く

スクリーンショット 2024-04-05 2.25.44.png

// 使用例
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
echo $fruit;  // raspberry

print_r($stack);
// 出力結果は以下の通り
// Array
// (
//     [0] => orange
//     [1] => banana
//     [2] => apple
// )

第1引数 $array参照渡しなので注意。

戻り値
取り除いた配列要素の値を返す。


4. array_unshift : & 配列の先頭に要素を追加する

スクリーンショット 2024-04-05 2.34.43.png

// 使用例
$queue = [
    "orange",
    "banana"
];

array_unshift($queue, "apple", "raspberry");

var_dump($queue);
// 出力結果は以下の通り
// array(4) {
//   [0] =>
//   string(5) "apple"
//   [1] =>
//   string(9) "raspberry"
//   [2] =>
//   string(6) "orange"
//   [3] =>
//   string(6) "banana"
// }

第1引数 $array参照渡しなので注意。

戻り値
処理後の配列の中の要素の数を返す。


5. array_shift : & 配列の先頭から要素を1つ取り除く

スクリーンショット 2024-04-05 2.38.54.png

// 使用例
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
echo $fruit;  // orange

print_r($stack);
// 出力結果は以下の通り
// Array
// (
//     [0] => banana
//     [1] => apple
//     [2] => raspberry
// )

第1引数 $array参照渡しなので注意。

戻り値
取り除いた配列要素の値を返す。


6. array_merge : ひとつまたは複数の配列をマージする

スクリーンショット 2024-04-05 2.46.29.png

// 使用例
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);

print_r($result);
// 出力結果は以下の通り
// Array
// (
//     [color] => green   // "green"で上書きされる
//     [0] => 2
//     [1] => 4
//     [2] => a
//     [3] => b
//     [shape] => trapezoid
//     [4] => 4
// )

二番目の配列の要素を最初の配列に追加したい (最初の配列に存在する要素は上書きせず、添字も変更しない) 場合は、配列結合演算子 + を使用すること。

$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
$result = $array1 + $array2;

var_dump($result);
// 出力結果は以下の通り
// 両方の配列に同じキーが存在する場合は最初の配列のものが残り、 二番目の配列の内容は無視される
// array(5) {
//   [0]=>
//   string(6) "zero_a"
//   [2]=>
//   string(5) "two_a"
//   [3]=>
//   string(7) "three_a"
//   [1]=>
//   string(5) "one_b"
//   [4]=>
//   string(6) "four_b"
// }

7. unset : & 変数または配列の要素を削除する

スクリーンショット 2024-04-05 2.55.49.png

// 使用例
// 配列の要素の一つを破棄する
unset($bar['foo']);

8. array_slice : 配列の一部を切り取った配列を返す

スクリーンショット 2024-04-05 3.02.57.png

// 使用例
$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, 2);      // "c", "d", "e" を返す
$output = array_slice($input, -2, 1);  // "d" を返す
$output = array_slice($input, 0, 3);   // "a", "b", "c" を返す

第4引数 $preserve_keys について
array_slice() はデフォルトで配列の数値キーを並べなおし、 リセットする。
しかし、preserve_keys を true にする事でこの動作を変更することができ、 文字列のキーはこのパラメータの値にかかわらず保存されるようになる。

$input = array("a", "b", "c", "d", "e");

// 配列キーの違いに注意
print_r(array_slice($input, 2, -1));
// Array
// (
//     [0] => c
//     [1] => d
// )
print_r(array_slice($input, 2, -1, true));  // 第4引数に true を渡す
// Array
// (
//     [2] => c
//     [3] => d
// )

9. array_splice : & 配列の一部を削除し、他の要素で置換する

スクリーンショット 2024-04-05 3.15.31.png

// 使用例1
// これは「置換」を行う
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));

var_dump($input);
// array(5) {
//   [0]=>
//   string(3) "red"
//   [1]=>
//   string(5) "green"
//   [2]=>
//   string(4) "blue"
//   [3]=>
//   string(5) "black"
//   [4]=>
//   string(6) "maroon"
// }
// 使用例2
// これは「挿入」を行う
$input = array("red", "green", "blue", "yellow");
array_splice($input, count($input), 0, array("black", "maroon"));

var_dump($input);
// array(6) {
//   [0]=>
//   string(3) "red"
//   [1]=>
//   string(5) "green"
//   [2]=>
//   string(4) "blue"
//   [3]=>
//   string(6) "yellow"
//   [4]=>
//   string(5) "black"
//   [5]=>
//   string(6) "maroon"
// }
// 使用例3
// これは「削除」を行う
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);

var_dump($input);
// array(2) {
//   [0]=>
//   string(3) "red"
//   [1]=>
//   string(5) "green"
// }

ポイント
array_splice() は、基本的には「置換」を行う。
ただし、$length = 0 の場合は「挿入」を行う。
$replacement が省略された場合は「削除」を行う。

第1引数 $array参照渡しなので注意。

配列の数値添字は保存されないので注意。(※ 文字列添字は保存される)


10. array_reverse : 要素を逆順にした配列を返す

スクリーンショット 2024-04-05 5.41.38.png

// 使用例
$input  = ['first', 'second', 'third'];
$reversed = array_reverse($input);
$preserved = array_reverse($input, true);

print_r($reversed);
// Array
// (
//     [0] => third
//     [1] => second
//     [2] => first
// )
print_r($preserved);
// Array
// (
//     [2] => third
//     [1] => second
//     [0] => first
// )

11. sort : & 配列を値の昇順にソートする

スクリーンショット 2024-04-05 5.49.24.png

// 使用例
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);   // アルファベットの昇順にソート

foreach ($fruits as $key => $val) {
    echo "fruits[" . $key . "] = " . $val . "\n";
}
// 出力結果は以下の通り
// fruits[0] = apple
// fruits[1] = banana
// fruits[2] = lemon
// fruits[3] = orange

第1引数 $array参照渡しなので注意。

比較結果が等しくなる二つの要素があった場合、それらの並び順は保持される。

戻り値
戻り値は常に true 。

sort() を使用すると、配列のキー情報は全て削除され、新しいキーが割り当てられる。
連想配列のキーを保持したい場合は、代わりに asort() を使用する。


12. rsort : & 配列を値の降順にソートする

スクリーンショット 2024-04-05 5.53.27.png

// 使用例
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);   // アルファベットの昇順にソート

foreach ($fruits as $key => $val) {
    echo "fruits[" . $key . "] = " . $val . "\n";
}
// 出力結果は以下の通り
// fruits[0] = orange
// fruits[1] = lemon
// fruits[2] = banana
// fruits[3] = apple

第1引数 $array参照渡しなので注意。

比較結果が等しくなる二つの要素があった場合、それらの並び順は保持される。

戻り値
戻り値は常に true 。

sort() を使用すると、配列のキー情報は全て削除され、新しいキーが割り当てられる。
連想配列のキーを保持したい場合は、代わりに arsort() を使用する。


13. ksort : & 配列をキーの昇順にソートする

スクリーンショット 2024-04-05 6.01.26.png

// 使用例
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);

foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
// 出力結果は以下の通り
// a = orange
// b = banana
// c = apple
// d = lemon

第1引数 $array参照渡しなので注意。

戻り値
戻り値は常に true 。


14. krsort : & 配列をキーの降順にソートする

スクリーンショット 2024-04-05 6.03.57.png

// 使用例
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);

foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
// 出力結果は以下の通り
// d = lemon
// c = apple
// b = banana
// a = orange

第1引数 $array参照渡しなので注意。

戻り値
戻り値は常に true 。


15. in_array : 配列に値があるかチェックする(返り値はboolean)

スクリーンショット 2024-04-05 6.07.23.png

// 使用例
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";   // 出力される
}
if (in_array("mac", $os)) {
    echo "Got mac";    // 大文字小文字が区別されるので、出力されない
}

第1引数 $needle が文字列の場合、 比較の際に大文字小文字は区別される。


16. array_search : 指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す

スクリーンショット 2024-04-05 6.10.51.png

// 使用例
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

第1引数 $needle が文字列の場合、 比較の際に大文字小文字は区別される。

戻り値
$needle が見つかった場合、見つかった最初の配列キーを返す。 見つからなかった場合、 false を返す。


17. array_keys : 配列の全てのキー、または一部のキーを返す(ヒットした全てのキーを配列で返す)

スクリーンショット 2024-04-05 6.15.30.png

// 使用例1
$array = array(0 => 100, "color" => "red");

print_r(array_keys($array));  // 全てのキーを返す
// 出力結果は以下の通り
// Array
// (
//     [0] => 0
//     [1] => color
// )
// 使用例2
$array = array("blue", "red", "green", "blue", "blue");

print_r(array_keys($array, "blue"));  // 指定した値のキーのみ返す
// 出力結果は以下の通り
// Array
// (
//     [0] => 0
//     [1] => 3
//     [2] => 4
// )
// 使用例3
$array = array("color" => array("blue", "red", "green"),
               "size"  => array("small", "medium", "large"));
               
print_r(array_keys($array));
// 出力結果は以下の通り
// Array
// (
//     [0] => color
//     [1] => size
// )


以上になります。
コーディングテストに頻出の内部関数について知っておくことは、スピーディに問題を解くために必要不可欠です。
今回紹介した5個の内部関数をしっかり覚えておきましょう!

別記事にて「文字列処理関数」「数値処理関数」についても解説してますので、そちらも参考にして下さい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0