配列があり、'green'
という文字列を検索したいのですが。したがって、この場合は$arr[2]
が返されます
$arr = array(0 => 'blue', 1 => 'red', 2 => 'green string', 3 => 'red');
in_array()のような事前定義された関数がありますそれをループするのではなくして、各値を比較しますか?
Phpのarray_search機能を利用できます。 PHP> = 4.0.5でサポートされています。
$array = array(0 => 'blue', 1 => 'red', 2 => 'green string', 3 => 'red');
$m_array = preg_grep('/^green\s.*/', $array);
$m_array
には、配列の一致する要素が含まれます。
部分一致の場合は、配列を反復して、 strpos() のような文字列検索関数を使用できます。
function array_search_partial($arr, $keyword) {
foreach($arr as $index => $string) {
if (strpos($string, $keyword) !== FALSE)
return $index;
}
}
完全一致の場合、 in_array() を使用します
in_array('green', $arr)
いくつかの方法があります...
$arr = array(0 => 'blue', 1 => 'red', 2 => 'green string', 3 => 'red');
ループで配列を検索します:
$results = array();
foreach ($arr as $value) {
if (strpos($value, 'green') !== false) { $results[] = $value; }
}
if( empty($results) ) { echo 'No matches found.'; }
else { echo "'green' was found in: " . implode('; ', $results); }
array_filter():を使用します
$results = array_filter($arr, function($value) {
return strpos($value, 'green') !== false;
});
他の引数でクロージャーを使用するために、use
キーワードがあります。したがって、それを抽象化して関数にラップすることができます:
function find_string_in_array ($arr, $string) {
return array_filter($arr, function($value) use ($string) {
return strpos($value, $string) !== false;
});
}
$results = find_string_in_array ($arr, 'green');
if( empty($results) ) { echo 'No matches found.'; }
else { echo "'green' was found in: " . implode('; ', $results); }
これが実際の例です: http://codepad.viper-7.com/xZtnN7
like as sql with '%needle%'で検索するには、
$input = preg_quote('gree', '~'); // don't forget to quote input string!
$data = array(
1 => 'orange',
2 => 'green string',
3 => 'green',
4 => 'red',
5 => 'black'
);
$result = preg_filter('~' . $input . '~', null, $data);
結果は
{
"2": " string",
"3": ""
}
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
?>
私は同じ問題を抱えているので、これを試してください...
PHP 5.3以降
array_walk($arr, function($item, $key) {
if(strpos($item, 'green') !== false) {
echo 'Found in: ' . $item . ', with key: ' . $key;
}
});
function check($string)
{
foreach($arr as $a) {
if(strpos($a,$string) !== false) {
return true;
}
}
return false;
}
これは、通常または多次元配列の関数です。
これがコードです(バージョン1):
function array_find($needle, array $haystack, $column = null) {
if(is_array($haystack[0]) === true) { // check for multidimentional array
foreach (array_column($haystack, $column) as $key => $value) {
if (strpos(strtolower($value), strtolower($needle)) !== false) {
return $key;
}
}
} else {
foreach ($haystack as $key => $value) { // for normal array
if (strpos(strtolower($value), strtolower($needle)) !== false) {
return $key;
}
}
}
return false;
}
次に例を示します。
$multiArray = array(
0 => array(
'name' => 'kevin',
'hobbies' => 'Football / Cricket'),
1 => array(
'name' => 'tom',
'hobbies' => 'tennis'),
2 => array(
'name' => 'alex',
'hobbies' => 'Golf, Softball')
);
$singleArray = array(
0 => 'Tennis',
1 => 'Cricket',
);
echo "key is - ". array_find('cricket', $singleArray); // returns - key is - 1
echo "key is - ". array_find('cricket', $multiArray, 'hobbies'); // returns - key is - 0
多次元配列の場合のみ-$ columnは、各配列内のキーの名前に関連しています。 $ needleが複数回出現する場合は、これに追加して各キーを配列に追加することをお勧めします。
複数の一致が予想される場合の例(version 2):
function array_find($needle, array $haystack, $column = null) {
$keyArray = array();
if(is_array($haystack[0]) === true) { // for multidimentional array
foreach (array_column($haystack, $column) as $key => $value) {
if (strpos(strtolower($value), strtolower($needle)) !== false) {
$keyArray[] = $key;
}
}
} else {
foreach ($haystack as $key => $value) { // for normal array
if (strpos(strtolower($value), strtolower($needle)) !== false) {
$keyArray[] = $key;
}
}
}
if(empty($keyArray)) {
return false;
}
if(count($keyArray) == 1) {
return $keyArray[0];
} else {
return $keyArray;
}
}
これは、一致が1つだけの場合にキーを返しますが、$ columnのいずれかの内部に$ needleが複数一致した場合は、一致するキーの配列を返します。
お役に立てれば :)
配列全体でフレーズをすばやく検索すると、次のようになります。
if (preg_match("/search/is", var_export($arr, true))) {
// match
}
UTF-8の大文字と小文字を区別しない部分文字列が配列に存在するかどうかを確認するために、このメソッドはmb_strtolowerまたはmb_convert_caseを使用するよりもはるかに高速であることがわかりました。
配列を文字列に分解します:$ imploded = implode( ""、$ myarray);。
カスタム関数を使用して、内破された文字列を小文字に変換します。$ lowercased_imploded = to_lower_case($ imploded);
function to_lower_case($ str){
$ from_array = ["A"、 "B"、 "C"、 "D"、 "E"、 "F"、 "G"、 "H"、 "I"、 "J"、 "K"、 "L "、" M "、" N "、" O "、" P "、" Q "、" R "、" S "、" T "、" U "、" V "、" W "、" X "、 「Y」、「Z」、「Ä」、「Ö」、「Ü」、「Õ」、「Ž」、「Š」];
$ to_array = ["a"、 "b"、 "c"、 "d"、 "e"、 "f"、 "g"、 "h"、 "i"、 "j"、 "k"、 "l "、" m "、" n "、" o "、" p "、" q "、" r "、" s "、" t "、" u "、" v "、" w "、" x "、 "y"、 "z"、 "ä"、 "ö"、 "ü"、 "õ"、 "ž"、 "š"];
foreach($ from_array as $ key => $ val){$ str = str_replace($ val、$ to_array [$ key]、$ str);}
$ strを返す;
}
function findStr($arr, $str)
{
foreach ($arr as &$s)
{
if(strpos($s, $str) !== false)
return $s;
}
return "";
}
必要に応じて、少し変更するだけで戻り値を対応するインデックス番号に変更できますが、「... return the $ arr [2]」と言ったので、代わりに値を返すように書きました。