トップページに戻る
Cマガ電脳クラブで勉強したこと
オートコンプリート
PHPメモ
正規表現メモ
サクラエディタの設定
LINQに対応したPHPの配列の操作
目次
001 Take(3)
array_slice関数が使える。
<?php
var_export(
array_slice(['AAA','BBB','CCC','DDD','EEE'] , 0 , 3)
);
// array (
// 0 => 'AAA',
// 1 => 'BBB',
// 2 => 'CCC',
// )
var_export(
array_slice([] , 0 , 3)
);
// array (
// )
002 Skip(3)
array_slice関数が使える。
<?php
var_export(
array_slice(['AAA','BBB','CCC','DDD','EEE'] , 3)
);
// array (
// 0 => 'DDD',
// 1 => 'EEE',
// )
var_export(
array_slice(['AAA','BBB'] , 3)
);
// array (
// )
003 First()
array_keys関数が使える。
<?php
$wk_arr = [ 2 => 'CCC' , 5 => 'EEE'];
$FirstKey = array_keys($wk_arr)[0];
$FirstVal = $wk_arr[$FirstKey];
echo "FirstKey = {$FirstKey} , FirstVal = {$FirstVal}";
// FirstKey = 2 , FirstVal = CCC
PHP 7.3からは、array_key_first関数が使える。
004 Last()
array_keys関数が使える。
<?php
$wk_arr = [ 2 => 'CCC' , 4 => 'EEE'];
$UB = count($wk_arr) - 1;
$LastKey = array_keys($wk_arr)[$UB];
$LastVal = $wk_arr[$LastKey];
echo "LastKey = {$LastKey} , LastVal = {$LastVal}";
// LastKey = 4 , LastVal = EEE
PHP 7.3からは、array_key_last関数が使える。
005 Where(述語)
array_filter関数が使える。
<?php
$wk_arr = [ 'AAA' , 'BBB' , 'CCC' , 'DDD' , 'EEE' ];
$OKVal1 = 'BBB';
$OKVal2 = 'DDD';
$filtered_arr = array_filter($wk_arr,
function($pVal) use($OKVal1,$OKVal2) {
return $pVal == $OKVal1
|| $pVal == $OKVal2;
});
var_export($filtered_arr);
// array (
// 1 => 'BBB',
// 3 => 'DDD',
// )
var_export(array_values($filtered_arr));
// array (
// 0 => 'BBB',
// 1 => 'DDD',
// )
添字が数値の配列にarray_filter関数を使うと、
添字に歯抜けが発生することがあり、
歯抜けを詰めるには、array_values関数を使用する。
006 Intersect(列挙)
array_intersect関数が使える。
<?php
$wk_arr1 = array(1 => 'AAA', 3 => 'CCC');
$wk_arr2 = array(2 => 'BBB', 4 => 'CCC');
var_export(array_intersect($wk_arr1,$wk_arr2));
// array (
// 3 => 'CCC',
// )
007 Except(列挙)
array_diff関数が使える。
<?php
$wk_arr1 = array(1 => 'AAA', 2 => 'BBB');
$wk_arr2 = array(3 => 'BBB', 4 => 'CCC');
var_export(array_diff($wk_arr1,$wk_arr2));
// array (
// 1 => 'AAA',
// )
008 Contains(要素)
in_array関数が使える。
<?php
$is_exists = in_array('AAA' , ['AAA','BBB','CCC']);
echo $is_exists ? 'AAAが要素に存在します。' : 'AAAは要素に存在しません。';
// AAAが要素に存在します。
009 Reverse()
array_reverse関数が使える。
<?php
// ■■■ 添字が数値の配列の場合 ■■■
$NumArrSei = [777,888,999];
$NumArrRev = array_reverse($NumArrSei);
var_export($NumArrSei);
// array (
// 0 => 777,
// 1 => 888,
// 2 => 999,
// )
var_export($NumArrRev);
// array (
// 0 => 999,
// 1 => 888,
// 2 => 777,
// )
// ■■■ 連想配列の場合 ■■■
$AssocArrSei = ['CCC' => 555 , 'EEE' => 999 , 'AAA' => 111];
$AssocArrRev = array_reverse($AssocArrSei);
var_export($AssocArrSei);
// array (
// 'CCC' => 555,
// 'EEE' => 999,
// 'AAA' => 111,
// )
var_export($AssocArrRev);
// array (
// 'AAA' => 111,
// 'EEE' => 999,
// 'CCC' => 555,
// )
010 OrderBy(ソート条件)
数値や文字列の配列の場合は、sort関数が使える。
連想配列の配列の場合は、usort関数やarray_multisort関数が使える。
PHP8からは安定ソートだが、PHP7までは安定でないソートとなる。
<?php
// ■■■ 数値や文字列の配列の場合 ■■■
$NumIndArr = [9,111,5];
sort($NumIndArr);
var_export($NumIndArr);
// array (
// 0 => 5,
// 1 => 9,
// 2 => 111,
// )
// ■■■ 連想配列の配列の場合 ■■■
$selected_line_arr = [];
$selected_line_arr[] = ['ID' => 1 , 'NumVal' => 111];
$selected_line_arr[] = ['ID' => 2 , 'NumVal' => 999];
$selected_line_arr[] = ['ID' => 3 , 'NumVal' => 555];
$selected_line_arr[] = ['ID' => 4 , 'NumVal' => 555];
// order by NumVal desc,ID asc な並びにソートする
// 方法1 usort関数でソート
usort($selected_line_arr,
function($pA , $pB){
if($pA['NumVal'] < $pB['NumVal']) return 1;
if($pA['NumVal'] > $pB['NumVal']) return -1;
if($pA['ID'] > $pB['ID']) return 1;
if($pA['ID'] < $pB['ID']) return -1;
return 0;
});
// 方法2 array_multisort関数でソート
$SortKey1 = [];
$SortKey2 = [];
foreach($selected_line_arr as $EachKey => $EachVal){
$SortKey1[$EachKey] = $EachVal['NumVal'];
$SortKey2[$EachKey] = $EachVal['ID'];
}
array_multisort($SortKey1,SORT_DESC,$SortKey2,SORT_ASC,$selected_line_arr);
var_export($selected_line_arr);
// array (0 => array ( 'ID' => 2 , 'NumVal' => 999),
// 1 => array ( 'ID' => 3 , 'NumVal' => 555),
// 2 => array ( 'ID' => 4 , 'NumVal' => 555),
// 3 => array ( 'ID' => 1 , 'NumVal' => 111),
// )