繁体   English   中英

如何在不使用函数的情况下在 php 中按单词长度对字符串进行排序?

[英]How to sort a string by length of its words in php without using functions?

我在一次采访中被问到一个问题,要在 php 中按单词的长度对字符串进行排序,而不使用内置函数。不知道如何做到这一点。 有人可以帮我解决这个问题吗?

字符串:按单词长度对字符串进行排序

提前致谢

 $array = array('harish', 'mohan', 'jaideep', 'hari');

    for ($i = 1; $i < count($array); $i++) {
        for ($j = $i; $j > 0; $j--) {
            if (strlen($array[$j]) < strlen($array[$j - 1])) {

                $tmp = $array[$j];
                $array[$j] = $array[$j - 1];
                $array[$j - 1] = $tmp;
            }
        }
    }

    var_dump($array);

你可以试试这个:

$string = "this is my test string";
$array = explode(" ", $string);
$result = array();
foreach ($array as $key => $string){
    $counter = 0;
    for($i = 0;;$i++){
        if (!isset($string[$i])){
            break;
        }
        $counter++;
    }
    $result[$counter][] = $string;
}

这将拆分您的字符串并将其放入一个数组中,其中键是计数的字符。 现在的问题是,您需要按键对数组进行排序,这可以通过使用ksort获取。 我不知道您是否可以使用它,如果不能,请参阅此答案(使用排序)此答案(无排序) ,这应该可以解决问题(尽管我没有对其进行测试)。

这是我提出的解决方案。 我添加了一些评论。

<?php

/* First part split the string in their words and store them in an array called $words. 
* The key is the length of the word and the value is an array with all the words having the same length as the key.
* e.g
* Array
(
    [4] => Array( [0] => Sort )
    [1] => Array( [0] => a )
    [6] => Array( [0] => string, [1] => length)
    [2] => Array( [0] => by, [1] => of)
    [3] => Array( [0] => its )
)
*/
$str = "Sort a string by length of its words";

$word = '';
$i = 0;
$word_length = 0;
$words = [];
$max = -1;

while( isset($str[$i]) ) {  
    if( $str[$i] !== ' ' ){
        $word .= $str[$i];
        $word_length++;     
    }else{
        //This is going to save the size of the longhest word in the array:     
        $max = ($word_length > $max) ? $word_length : $max; 
        //store the
        $words[$word_length][] = $word;                     
        $word = '';
        $word_length = 0;
    }
    $i++;
}

//print_r($words); // uncomment this if you wanna see content of the array.


//The if-condition is for ascending order or descending order.
$order = "DESC"; // "ASC" | "DESC"
$res = '';
if( $order === "DESC") {
    for( $i = $max; $i>=0 ; $i--) {
        if( ! isset($words[$i]) ) { continue; } 
        foreach($words[$i] as $word){
            $res .= $word . ' ';
        }               
    }
}else {
    //ascending order:
    for( $i = 0; $i<=$max; $i++) {
        if( ! isset($words[$i]) ) { continue; } 
        foreach($words[$i] as $word){
            $res .= $word . ' ';
        }               
    }
}

echo $res . "\n";
?>

这是你想要的吗?

注意: isset、echo、print 等是 PHP 语言结构,而 print_r()、strlen() 等是内置函数。 如果你有疑问,你可以在这篇文章中看到有什么不同。 PHP 中的语言结构和“内置”函数有什么区别?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM