Bien que dans ce cas, il ne convient pas parce que vous ll être traversant le tableau deux fois, vous pouvez également utiliser array_reduce pour comparer chaque élément contre le reste comme ceci:.
<?php
$data = array('163','630','43','42','999','31');
//Will return the longest element that is nearest to the end of the array (999)
//That's why we use strlen() on the result.
$max_l = strlen(array_reduce($data,'maxlen'));
//Will return the shortest element that is nearest to the end of the array (31)
$min_l = strlen(array_reduce($data,'minlen'));
echo "The longest word is $max_l characters, while the shortest is $min_l\n";
function maxlen($k,$v) {
if (strlen($k) > strlen($v)) return $k;
return $v;
}
function minlen($k,$v) {
if ($k == '') return PHP_INT_MAX;
if (strlen($k) < strlen($v)) return $k;
return $v;
}
?>
Si vous êtes en utilisant PHP 5.3.0+, vous pouvez profiter de closures:
<?php
$max_l = strlen(array_reduce($data,
function ($k,$v) { return (strlen($k) > strlen($v)) ? $k : $v; }
));
$min_l = strlen(array_reduce($data,
function ($k,$v) {
if (!$k) return PHP_INT_MAX;
return (strlen($k) < strlen($v)) ? $k : $v;
}
));
echo "The longest word is $max_l characters, while the shortest is $min_l\n";
?>
Voulez-vous juste la longueur de la chaîne ou voulez-vous aussi les chaînes? – NullUserException
Je suppose que les deux sont utiles –
Vous devriez avoir supprimé la confusion longueur/valeur en utilisant des chaînes à la place de ces nombres. –