Anche se in questo caso non è consigliabile perché si' ll essere attraversando la matrice due volte, è anche possibile utilizzare array_reduce per confrontare ogni elemento contro il resto ti piace questa:.
<?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;
}
?>
Se sei utilizzando PHP 5.3.0+ è possibile usufruire di 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";
?>
fonte
2010-09-14 23:13:13
Vuoi solo la lunghezza della stringa o vuoi anche le stringhe? – NullUserException
Suppongo che entrambi siano utili –
Dovresti aver rimosso la confusione lunghezza/valore usando le stringhe al posto di questi numeri. –