una remove eliminar cortar caracteres cadena array php arrays string string-length

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);