配列で[number]のようなパターンを見つける方法は?
私はこれに似た配列を持っています:
$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');
配列をフィルタリングして、 [a number] のような特定のパターンを持つ文字列を保持する方法は?
で配列をフィルタリングしてarray_filter()
から、それを反復処理できます。
$filtered_array = array_filter( $array, function( $el) {
return preg_match( '/^\[\d+\]$/', $el);
});
これはコールバックを使用して、preg_match()
左角かっこ[
、桁数、\d+
右角かっこで構成されるエントリを検索します]
。
あなたが試すことができますis_array()
:
foreach ($array as $num) {
if(is_array($num)) {
echo $num . "<br />";
}
}
いくつかの可能性がありますが、ここではそのうちの 2 つを示します。
<?php
$array = array(1, 2, 3, "{1}", "{2}", "{3}", "[1]", "[2]", "[3]");
// Method 1
foreach ($array as $num)
{
if(preg_match("/\[\d+\]/", $num)){
echo $num . "<br />";
}
}
echo "<hr/>"
// Method 2
$filtered=preg_grep("/\[\d+\]/", $array);
foreach ($filtered as $num)
{
echo $num . "<br />";
}
?>
preg_grepを使用するだけです:
$array = array(1, 2, 3, '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');
$new_array = preg_grep('#^\[\d+(?:.\d+)?\]$#', $array);
$new_array = array_values($new_array); // re-index the array
print_r($new_array); // print the results
正規表現の説明:
^
: 文字列の始まり\[
: マッチ[
\d+
:1桁以上一致(?:.\d+)?
: オプションで小数部分に一致\]
: マッチ]
$
: 文字列の終わりもしかしてこういうこと?正規表現は、開始の[
後に 1 桁の数字が続き、その後に終了が続くものと一致し]
ます。
foreach ($array as $num) {
if ( preg_match( '#\[\d\]#', $num ) ) {
echo $num;
}
}