2013-06-28 2 views
-1

min() 함수를 사용하여 다른 값을 검색 할 수있는 방법이 있습니까?min() 함수이지만 다른 값을 검색합니다.

EDIT는 인수 목록에서 사용되는 값을 반환하는 방식으로

min() 작품, 나는 다른 값이 반환 된 입력 인수에 연결해야합니다.

$string1 = 'This a longer string'; 
$string2 = 'Short string'; 

$string_value1 = 320; 
$string_value2 = 170; 

min($string_value1, $string_value2); // I want it to return $string2, because it has the lowest value 
+0

'$의 shortestlength = 분 (array_map ('나 strlen', 배열 ($ 문자열 1, $ 문자열 2)));' –

+0

@MarkBaker 내 편집을 참조하십시오, 나는 길이에 관심이 없습니다. – silkfire

+0

$ string_value2가 가장 낮은 값을 가지기 때문에 $ string2가 반환되기를 원한다면; $ string2와 $ string_value2 (사람이 읽을 수있는 이름 제외) 사이의 관계는 무엇입니까? –

답변

1

아니요 min 또는 기타 기본 PHP 기능의 동작을 변경할 수 없습니다. 그러나 귀하의 질문을 올바르게 이해하면 필요하지 않습니다. 이런 식으로 뭔가를 시도 :

$string_value1 = 320; 
$string_value2 = 170; 

$string1 = 'This a longer string'; 
$string2 = 'Short string'; 

#first link your numbers and strings together by using an array 
$strings = array(
    $string_value1 => $string1, 
    $string_value2 => $string2 
); 

#determine the lowest "string value" 
$lowest_index = min($string_value1, $string_value2); 

#get the string associated with this value 
echo $strings[$lowest_index];   #prints "Short string" 
0

자체 기능으로 충분하지 않습니까?

if(strlen($string1) < strlen($string2)) { 
    return $string1; 
} else { 
    return $string2; 
} 
+1

또는 그냥 strlen ($ string1) <= strlen ($ string2)?$ string1 : $ string2; – symcbean

+0

2 개 이상의 값으로 작동해야합니다. 편집을 참조하십시오. – silkfire

1

당신이 시도 할 수 :

간단한 예 :

$strings = [ 
     'This a longer string', 
     'Short string' 
]; 

echo array_reduce($strings, function ($a, $b) { 
    return strlen($b) > strlen($a) ? $a : $b; 
}); 

당신은 또한 비교 다른 유형 .. 다음

예를 사용할 수 있습니다해야 할 경우 1

$string1 = 'This a longer string'; 
$string2 = 'Short string'; 
$string3 = 'Hello'; 
echo minLength($string1, $string2 , $string3); 

출력

Hello 

예 2

$range = range(170, 320); 
shuffle($range);   // Shuffle the array 
echo minLength($range); 

출력

170 

기능 사용

function minLength() { 
    $parse = function ($v) { 
     if (is_int($v) || is_float($v)) { 
      return $v; 
     } elseif (is_string($v)) { 
      return strlen($v); 
     } elseif (is_object($v) || is_array($v)) { 
      return count($v); 
     } else { 
      return $v; 
     } 
    }; 

    $args = (func_num_args() === 1 && is_array(func_get_arg(0))) 
      ? func_get_arg(0) : func_get_args(); 

    return array_reduce($args, function ($a, $b) use($parse) { 
     return $parse($b) > $parse($a) ? $a : $b; 
    }, reset($args)); 
} 
+0

어떻게 가능합니까? – silkfire

+0

번호 인쇄를 시도하십시오 min ('aaaaaaaaaa', 'b'); – symcbean

0

이 시도 :

$string1 = 'This a longer string'; 
$string2 = 'Short string'; 

$strings = array($string1, $string2); 
$length = array(); 
$smallest = '-N/A-'; 

foreach ($strings as $k=>$v) 
{ 
    $length[$k] = strlen($v); 
} 

$min = min($length); 
foreach ($strings as $k=>$v) 
{ 
    if ($length[$k] === $min) 
    { 
     $smallest = $v; 
     break; 
    } 
} 

배열에 원하는만큼의 값을 추가 할 수 있으며 가장 작은 문자 수의 문자열을 반환합니다. 가장 작은 문자 수와 일치하는 문자열이 여러 개인 경우 첫 번째 문자열이 반환됩니다. 변수 $ smallest는 결국 가장 작은 문자열을 포함하게됩니다.

0

이 여러 값으로 작동합니다

<?php 
$array = array("Short string", "This a longer string", "This is an even longer string"); 
$longest = 0; 
for($i = 0; $i < count($array); $i++) 
{ 
    if($i > 0) 
    { 
     if(strlen($array[$i]) > strlen($array[$longest])) 
     { 
     $longest = $i; 
     } 
    } 
} 
echo $array[$longest]; //outputs "This is an even longer string" 
?> 
관련 문제