1

文字列内のテキストの順序に基づいて変数が配列内で順序付けられるように、PHP で変数の配列を作成しようとしています。

たとえば、 string があり、string$s = "Tuesday, Thursday, Monday, Sunday, Wednesday, Saturday, Friday"の配列がある場合、 の文字列の 1 つに一致する部分が見つかるまで$strings = array("Monday", "Tuesday", "Wednesday", etc.);チェックしたいと思います。次に、各日のデータを表す変数を配列に追加します。配列に、日が表示される順序で.$s$strings$listofdays$s

その後、次の順序に基づいて次の$listofdaysようになります($tues_data, $thurs_data, $mon_data, etc.)$s

PHPでこれを行う簡単な方法はありますか?

4

3 に答える 3

1

私が理解した場合は、文字列の順序に従って$s、要素が $strings 配列に存在するかどうかを確認する必要があります。たとえば、火曜日が に存在する場合は$strings、$Tue_data を $listofdays に追加します。

それがあなたが望むものなら、これを試してください:

<?php

$s = "Tuesday, Thursday, Monday, Sunday, Wednesday, Saturday, Friday";

$strings = array("Monday", "Tuesday", "Wednesday",);
$ss=explode(',',str_replace(' ','', $s));

foreach($ss as $day){
    if(in_array($day,$strings)){
       $varName = explode('day',$day);

       //$listofdays[]=${$varName[0].'_data'};//contains values of variables $Tues_data.. 
       $listofdays[]='$'.$varName[0].'_data';//Contains literal string '$Tues_data' etc...
    }
}

print_r($listofdays);
?>

出力:

Array ( [0] => $Tues_data [1] => $Mon_data [2] => $Wednes_data )
于 2013-09-14T14:01:48.667 に答える
0

可能なアプローチの 1 つは、これらの文字列を交互に使用して単一のパターンを作成し、このパターンを元の文字列に適用することです。例えば:

function getMatches($source, array $strings) {
  rsort($strings); // the easiest way to prevent Wed|Wednesday collisions
  /* more efficient alternative checks length only:
  usort($strings, function($a, $b) {
    $al = strlen($a);
    $bl = strlen($b);
    if ($al === $bl) {
      return 0;
    }
    return $al < $bl ? 1 : -1;  
  }); */
  $pattern = implode('|', array_map('preg_quote', $strings));
  preg_match_all("/$pattern/", $source, $matches);
  return $matches[0];
}

$strings = array('$Mon', '$Tue', '$W', '$Wed', '$Thu', '$Fri');
$source  = '$Tuesday, $Thursday, $Monday, $Sunday, $Wednesday';
$res = getMatches($source, $strings);

デモ

array_mapこの配列を取得したら、好きな値のセットに簡単に入れることができます。

于 2013-09-14T13:43:17.207 に答える