J'ai un tablea comme ça
$data = array(
"163",
"630",
"43",
"924",
"4",
"54"
);
Comment puis-je sélectionner les valeurs les plus petites et les plus grandes à partir de celle-ci selon la longueur de la chaîne Pas de valeur Note. (((pour cet exemple, il est 1 (plus petit) et 3 (plus grand).
On dirait que vous devriez utiliser un array_map ()
// Convert array to an array of string lengths
$lengths = array_map('strlen', $data);
// Show min and max string length
echo "The shortest is " . min($lengths) .
". The longest is " . max($lengths);
Notez que le $lengths
Le tableau est non traduit, vous pouvez donc récupérer facilement le nombre correspondant pour chaque longueur de chaîne.
Voici une version améliorée de code de Brian_D :
$min = PHP_INT_MAX;
$max = -1;
foreach ($data as $a) {
$length = strlen($a);
$max = max($max, $length);
$min = min($min, $length);
}
Bien que dans ce cas, il n'est pas conseillé car vous passerez à deux reprises la matrice, vous pouvez également utiliser Array_reduce pour comparer chaque élément contre le reste. Comme ça:
<?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 utilisez PHP 5.3.0+ Vous pouvez profiter de fermetures :
<?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";
?>
$min = 100;
$max = -1;
foreach($data as $a){
$length = strlen($a);
if($length > $max){ $max = $length; }
else if($length < $min){ $min = $length; }
}
Pour l'achèvement, voici une doublure pour au maximum et au minimum:
$maximum = max(array_map('strlen', $array));
$minimum = min(array_map('strlen', $array));