2016-12-22 19 views
1
$target = 285 
$array = array("260-315", "285-317", "240-320") 

$ target値で始まる値の配列を検索する必要があります。また、$targetの値は3桁に限定されないので、ハイフンの前に数字の一致を探しています。配列内の一致する部分値を検索する

は、だから私は

$newTarget = 285-317 
$finalTarget = 317 

ノートで終わるしたい:「200から285」のマッチ

+2

は、あなたが思い付いた私たちを表示... – Furgas

+1

あなたが知っている 'その260-315'(およびその他s)は '-55'と計算されますか? –

+0

このようなもの:-https://eval.in/702826(ただし配列の値は文字列でなければなりません。そうでないと自動的に減算され、-55 @u_mulderと表示されます) –

答えて

1

下記(私の変更の答え)のようにそれを行うことができます: -

<?php 
$target = 285; 
$array = array('260-315', '285-317', '240-320',"200-285"); 
foreach($array as $key=>$value){ 
    if($target ==explode('-',$value)[0]){ 
     echo $newTarget = $array[$key]; 
     echo PHP_EOL; 
     echo $finalTarget = explode('-',$array[$key])[1]; 
    } 
} 
?> 

https://eval.in/702862

+0

値のいずれかが200-285の場合はどうなりますか?ハイフンの前の数字がターゲットです。 – user300979

+0

私が意味するのは、一致するものを見つけようとする唯一の数字は、ハイフンの前の数字です。ターゲットが285の場合、200-285は一致しないはずです。 – user300979

+0

@ user300979編集した回答を確認する –

0

私ではないので、私は唯一のハイフンの前の数字の一致を探していますターゲットから始まるメンバーにアレイを絞り込むのに役立ちます。

次に、戻り値を分割して最終ターゲットに到達させることができます。

<?php 
$target = '285'; 
$array = array('260-315', '285-317', '240-320'); 


$out = array_filter($array, function($val) use ($target) { 
    return strpos($val, $target) === 0; 
}); 

var_export($out); 

出力:

array (
    1 => '285-317', 
) 
+0

うわー、基本的に同じ時間。グレート答え;) –

0

の代わりにあなたがarray_filterと一致しないものを除外することができるものと一致し、見つけます。例えば

$target = 285; 

$original = array('260-315', '285-317', '240-320'); 

$final = array_filter($original, function ($value) use ($target) { 

    // Check if match starts at first character. Have to use absolute check 
    // because no match returns false 
    if (stripos($value, $target) === 0) { 

     return true; 

    } 

    return false; 

}); 

$finalアレイは、非マッチング値なし$original配列のコピーであろう。出力するには

最初の数字が一致のあなたの配列によって、あなたがすることができ、ループやハイフン前の値を取得する:あなたがそのあなたのために、(私の答えの下)のコメントで私を尋ねた何

foreach ($final as $match) { 

    $parts = explode('-', $match); 

    if (is_array($parts) && ! empty($parts[0])) { 

     // Show or do something with value 
     echo $parts[0]; 

    } 
} 
0

このようなものがあなたのために働くことができますか? array_filter

$target = 285; 
$array = array("260-315", "285-317", "240-320"); 
$newTarget = null; 
$finalTarget = null; 

$filteredArray = array_filter($array, function($val) use ($target) { 
    return strpos($val, $target."-") === 0; 
}); 

if(isset($filteredArray[0])){ 
    $newTarget = $filteredArray[0]; 
    $finalTarget = explode($filteredArray[0], "-")[1]; 
} 
0
<?php 
$target = 285; 
$arrStack = array(
    "260-315", 
    "285-317", 
    "240-320", 
); 


$result = preg_grep('/'.$target.'/',$arrStack); 

echo "<pre>"; print_r($result); echo "</pre>"; 
0

使用array_filter

例:

$target = '260'; 
$array = ['260-315', '285-317', '240-320']; 

$matches = array_filter($array, function($var) use ($target) { return $target === explode('-', $var)[0]; }); 

print_r($matches); 

出力:

Array 
(
    [0] => 260-315 
) 
関連する問題