2014-08-27 4 views
1

동일한 수의 키와 비슷하지만 동일하지 않은 숫자 인덱스가있는 2 개의 배열이 있습니다. $ unordered는 정렬되지 않은 데이터를 가지고 있지만 ordered $ array는 적절한 순서로 데이터를 가지고 있습니다. 정렬 된 $와 동일한 순서로 정렬되지 않은 $을 정렬하려고하지만, 백분율 값은 정렬되지 않은 $에서 대괄호로 묶습니다.비슷한 배열을 기반으로 배열을 정렬 하시겠습니까?

정렬되지 않은 $ :

[0] => "Horse [1%]" 
[1] => "Cat [5%]" 
[2] => "Dog [94%]" 

주문 $ :

[0] => "Cat" 
[1] => "Horse" 
[2] => "Dog" 

감사합니다.

+0

의 관계는 무엇을 이해할 수 있지만? 여기서 공통 분모가 보이지 않는다. – Ohgodwhy

+1

나는'$ undernored'가'$ ordered' 배열에 의해 설정된 것과 같은 순서를 가지기를 바란다고 생각한다. – Mephy

+1

주문이란 무엇입니까? 알파벳 순서가 맞지 않습니다. 편지 수는 옳지 않습니다. 그럼 어떻게 분류하고 있니? – Jay

답변

3

usort은 예제와 같이 복잡한 것들에 대한 정렬 기능입니다.

다음과 같이 시도해보십시오. 기본적으로 $unordered의 값을 구문 분석 한 다음 $ordered 배열에서 값을 검색합니다.

usort($unordered, function($a, $b) use($ordered){ 
    $aVal = explode(' ', $a); 
    $bVal = explode(' ', $b); 

    return array_search($aVal[0], $ordered) - array_search($bVal[0], $ordered); 
}); 

DEMO : https://eval.in/184201

+1

비슷한 것을 쓰고있는 중이었습니다. 이 예제는 나를 위해 일했습니다. +1. – Drumbeg

+0

가끔 값의 경우 [%] 예 앞에 공백이 여러 개있을 수 있습니다. 큰 동물 [56 %]. explode 문을 수정하여 첫 번째 문자 집합을 볼 수있는 방법이 있습니까? 죄송합니다. 구현하려고 할 때이 문제가 발생했습니다. – user3600400

+0

@ user3600400 : 대신에'explode ([[, $ a]')'할 수 있습니다. 그것은 작동하는 것 같습니다. 그렇지 않으면 정규식을 사용해야합니다. –

2

로켓 Hazmats가 더 좋은 모습과 더 나은,하지만 당신은 아마이

$array = array(); 
$array[] = "Horse [5%]" 
$array[] ="Cat [1%]"; 
$array[] ="Dog [99%]"; 
$ordered = array(); 
$ordered[] = "Cat"; 
$ordered[] = "Horse"; 
$ordered[] = "Dog"; 
$var = ""; 

$a = array_fill(0, count($ordered), ''); 
for($i = 0; $i < count($array); $i++){ 
    preg_match("/[a-zA-z]+/", $array[$i], $var); 
    for($j = 0; $j < count($ordered); $j++){ 
     if($var[0] == $ordered[$j]) $a[$j] = $array[$i]; 
    } 
} 

return $a; 
관련 문제