PHP でありそうなのになかった関数作った
◆ startsWith, endsWith, joinByKey, filterByKey, reduceByEntry
◆ ちょっとしたものを作るときに欲しかったけどなかったので自作
◆ ちょっとしたものを作るときに欲しかったけどなかったので自作
久々に PHP 触れました
PHP っていっぱい関数があるのですが 思いの外できてほしいことができなかったので関数を作りました
使用例
startsWith, endsWith は JavaScript ならデフォルトでありますし
reduceByEntry も JavaScript なら reduce で value だけでなく key も渡してくれるの reduce で足りています
同じく filterByKey も JavaScript なら両方渡されるので好きな方を使うだけで済みます
これは作ったあとに key だけじゃなく両方渡すようにしておけばよかったと思いました
joinByKey は JavaScript でも
これを除くと JavaScript はできるのに PHP でできないもの ということになりました
こういう単純でよく使う系は PHP に揃ってそうなのになんでないんでしょう?
PHP っていっぱい関数があるのですが 思いの外できてほしいことができなかったので関数を作りました
function startsWith($str, $substr){
return (bool)preg_match("/^{$substr}/", $str);
}
function endsWith($str, $substr){
return (bool)preg_match("/{$substr}$/", $str);
}
function joinByKey($arr, $spl){
return join($spl, array_keys($arr));
}
function filterByKey($arr, $fn){
$result = [];
foreach($arr as $k => $v){
if($fn($k)){
$result[$k] = $v;
}
}
return $result;
}
function reduceByEntry($arr, $fn, $acc = null){
foreach($arr as $k => $v){
$acc = $fn($acc, $v, $k);
}
return $acc;
}
return (bool)preg_match("/^{$substr}/", $str);
}
function endsWith($str, $substr){
return (bool)preg_match("/{$substr}$/", $str);
}
function joinByKey($arr, $spl){
return join($spl, array_keys($arr));
}
function filterByKey($arr, $fn){
$result = [];
foreach($arr as $k => $v){
if($fn($k)){
$result[$k] = $v;
}
}
return $result;
}
function reduceByEntry($arr, $fn, $acc = null){
foreach($arr as $k => $v){
$acc = $fn($acc, $v, $k);
}
return $acc;
}
使用例
var_dump(startsWith("abcd", "b"));
// bool(false)
var_dump(startsWith("abcd", "abc"));
// bool(true)
var_dump(endsWith("abcd", "cd"));
// bool(true)
var_dump(endsWith("abcd", "bc"));
// bool(false)
var_dump(joinByKey(["a" => 1, "b" => 2, "z" => 128], ";"));
// string(5) "a;b;z"
var_dump(filterByKey(["a" => 1, "b" => 2, "z" => 128], function($key){
return $key === "b";
}));
// array(1) {
// 'b' =>
// int(2)
// }
var_dump(reduceByEntry(["a" => 1, "b" => 2, "z" => 128], function($acc, $v, $k){
return "{$acc}{$k}={$v};";
}, ""));
// string(14) "a=1;b=2;z=128;"
// bool(false)
var_dump(startsWith("abcd", "abc"));
// bool(true)
var_dump(endsWith("abcd", "cd"));
// bool(true)
var_dump(endsWith("abcd", "bc"));
// bool(false)
var_dump(joinByKey(["a" => 1, "b" => 2, "z" => 128], ";"));
// string(5) "a;b;z"
var_dump(filterByKey(["a" => 1, "b" => 2, "z" => 128], function($key){
return $key === "b";
}));
// array(1) {
// 'b' =>
// int(2)
// }
var_dump(reduceByEntry(["a" => 1, "b" => 2, "z" => 128], function($acc, $v, $k){
return "{$acc}{$k}={$v};";
}, ""));
// string(14) "a=1;b=2;z=128;"
startsWith, endsWith は JavaScript ならデフォルトでありますし
reduceByEntry も JavaScript なら reduce で value だけでなく key も渡してくれるの reduce で足りています
同じく filterByKey も JavaScript なら両方渡されるので好きな方を使うだけで済みます
これは作ったあとに key だけじゃなく両方渡すようにしておけばよかったと思いました
joinByKey は JavaScript でも
Object.keys(obj).join(", ")
になって PHP と同じようなものですこれを除くと JavaScript はできるのに PHP でできないもの ということになりました
こういう単純でよく使う系は PHP に揃ってそうなのになんでないんでしょう?