min()函数,但检索不同的值

时间:2013-06-28 21:59:53

标签: php string-comparison min

是否有某种方法可以使用min()函数检索不同的值?

  

修改

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

5 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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"

答案 2 :(得分:0)

你自己的功能还不够吗?

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

答案 3 :(得分: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最终将包含最小的字符串。

答案 4 :(得分: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"
?>