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', массив ($ string1, $ string2)));' –

+0

@MarkBaker См. Мое редактирование, меня не интересует длина – silkfire

+0

Если вы хотите, чтобы вы возвращали $ string2, потому что $ string_value2 имеет самое низкое значение; Какова связь между $ 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

Он должен работать с более чем двумя значениями, см. Мое редактирование. – 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" 
?>