2013-09-14 5 views
1

PHP에서 변수 배열을 문자열의 텍스트 순서에 따라 정렬 된 방식으로 정렬하려고합니다. 내가 문자열 $s = "Tuesday, Thursday, Monday, Sunday, Wednesday, Saturday, Friday"을 가지고, 내가 문자열 $strings = array("Monday", "Tuesday", "Wednesday", etc.);의 배열이있는 경우문자열 목록에서 다음에 일치하는 문자열 찾기 PHP

예를 들어, 나는 $strings에있는 문자열 중 하나와 일치 그것의 일부를 찾을 때까지 $s를 통해 확인 할 수 있습니다. 그런 다음 각 날의 데이터를 나타내는 변수를 배열 에 표시된 순서대로 $listofdays 배열에 추가합니다.

그래서 이후, $listofdays는 PHP에서 이렇게 간단한 방법이 있나요 $s

의 순서에 따라 ($tues_data, $thurs_data, $mon_data, etc.)과 같을 것이다?

+0

어레이 ?? 그들은 이미 정의되어 있습니까? –

답변

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) 
0

하나의 가능한 접근 방법은 이러한 문자열을 기반으로 단일 패턴을 생성 한 다음이 패턴을 소스 문자열에 적용하는 것입니다. 예 :

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); 

Demo.

이 배열을 얻은 후에는 array_map을 원하는 값으로 쉽게 변환 할 수 있습니다.

0

당신이 그것을 반복하기 전에 당신의 배열을 정렬 할 것 나에게 소리?

$order = 'Tuesday, Thursday, Monday, Sunday, Wednesday, Saturday, Friday'; 
$array = array('Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday'); 

uasort($array, function($a, $b) use($order){ 
    $x = strpos($order, $a); 
    $y = strpos($order, $b); 
    return $x<$y ? -1 : ($x==$y ? 0 : 1); 
}); 

print_r($array); // foreach($array as $day){ /* etc */ } 

working example출력 : 변수

Array 
(
    [1] => Tuesday 
    [3] => Thursday 
    [0] => Monday 
    [2] => Wednesday 
    [4] => Friday 
) 
관련 문제