remove - PHP cadena más corta/más larga en la matriz
remove html tags php (5)
Aquí hay una versión mejorada del código de brian_d :
$min = PHP_INT_MAX;
$max = -1;
foreach ($data as $a) {
$length = strlen($a);
$max = max($max, $length);
$min = min($min, $length);
}
Tengo una matriz como esta
$data = array(
"163",
"630",
"43",
"924",
"4",
"54"
);
¿Cómo puedo seleccionar los valores más pequeños y más grandes de acuerdo con la longitud de la cadena NO con el valor numérico? (para este ejemplo es 1 (el más pequeño) y 3 (el más grande) .
Aunque en este caso no es recomendable porque atravesarás la matriz dos veces, también puedes usar array_reduce para comparar cada elemento con el resto. Me gusta esto:
<?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 está utilizando PHP 5.3.0+, puede aprovechar los 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";
?>
Parece que deberías usar 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);
Tenga en cuenta que la matriz $lengths
no está clasificada, por lo que puede recuperar fácilmente el número correspondiente para cada longitud de cadena.
$min = 100;
$max = -1;
foreach($data as $a){
$length = strlen($a);
if($length > $max){ $max = $length; }
else if($length < $min){ $min = $length; }
}
<?php
$array = array(
"163",
"630",
"43",
"924",
"4",
"54"
);
$arraycopy = array_map(''strlen'',$array);
asort($arraycopy);
$min = reset($arraycopy);
//if you need a single ''minword''
$minword = $array[key($arraycopy)];
//if you need them all
$minwords = array_intersect_key($array,array_flip(array_keys($arraycopy,$min)));
$max = end($arraycopy);
//if you need a single ''maxword''
$maxword = $array[key($arraycopy)];
//if you need them all:
$maxwords = array_intersect_key($array,array_flip(array_keys($arraycopy,$max)));
var_dump($min,$max,$minword,$maxword,$minwords,$maxwords);