代码之家  ›  专栏  ›  技术社区  ›  user13286

PHP-将字符串拆分为两个相等的部分,但在第二个字符串中包含更多单词

  •  2
  • user13286  · 技术社区  · 2 年前

    我有一个函数,可以根据字符串中的单词数将字符串分成两个相等的部分。然后,我将两个新字符串单独包装 span s.如果原始字符串中有奇数个单词,我希望第二个跨度包含1个额外的单词。

    当前附加单词将转到第一个 跨度 :

    $array  = explode( ' ', 'Lorem ipsum dolor sit amet' );
    $count = count( $array );
    $per_part = max( round( $count / 2 ), 1 );
    $new_array     = [];
    
    for ( $i = 0; $i < 2; $i++ ) {
        $new_array[] = array_slice( $array, $i * $per_part, $per_part );
    }
    
    $first_string = join(' ', $new_array[0]);
    $second_string = join(' ', $new_array[1]);
    
    $new_string = '<span>' . $first_string . '</span>' . ' <span>' . $second_string . '</span>';
    echo htmlspecialchars($new_string);
    

    当前结果:

    <span>Lorem ipsum dolor</span> <span>sit amet</span>
    

    所需结果:

    <span>Lorem ipsum</span> <span>dolor sit amet</span>
    
    3 回复  |  直到 2 年前
        1
  •  1
  •   Keyboard Corporation    2 年前

    将单词总数四舍五入除以2,计算每个部分的单词数。这将给你第一部分的字数。然后,计算将添加到第二部分的剩余单词。

    $array = explode( ' ', 'Lorem ipsum dolor sit amet' );
    $count = count( $array );
    $per_part = floor( $count / 2 );
    $remaining_words = $count - $per_part;
    
    $new_array = [];
    
    $new_array[] = array_slice( $array, 0, $per_part );
    $new_array[] = array_slice( $array, $per_part, $remaining_words );
    
    $first_string = join(' ', $new_array[0]);
    $second_string = join(' ', $new_array[1]);
    
    $new_string = '<span>' . $first_string . '</span>' . ' <span>' . $second_string . '</span>';
    echo htmlspecialchars($new_string); //Expected Output: <span>Lorem ipsum</span> <span>dolor sit amet</span>
    

    floor( $count / 2 ) 用于确保当总数为奇数时,第一部分获得大多数单词。然后将剩下的单词添加到第二部分中。这样,如果原始字符串中有奇数个单词,则第二个跨度将包含1个额外的单词。

        2
  •  1
  •   ZeNix    2 年前

    我想你可以用 ceil() 为了将结果四舍五入,如果结果字数为奇数,则额外的单词将进入第二个跨度:

    $per_part = max(ceil($count / 2), 1);
    
        3
  •  1
  •   Adi    2 年前

    你可以根据单词总数是偶数还是奇数来计算每个部分应该包含多少单词,所以如果是偶数,两个部分都将包含相同数量的单词,如果是奇数,第一部分将包含一个额外的单词。像这样的

    $array  = explode( ' ', 'Lorem ipsum dolor sit amet' );
    $count = count( $array );
    $per_part = max(ceil($count / 2), 1);
    $new_array     = [];
    
    for ($i = 0; $i < 2; $i++) {
        $new_array[] = array_slice($array, $i * $per_part, $per_part);
    }
    
    if ($count % 2 === 1) {
        $last_word = array_pop($new_array[0]);
        array_unshift($new_array[1], $last_word);
    }
    
    $first_string = join(' ', $new_array[0]);
    $second_string = join(' ', $new_array[1]);
    
    $new_string = '<span>' . $first_string . '</span>' . ' <span>' . $second_string . '</span>';
    echo htmlspecialchars($new_string);
    

    编辑:使用ceil并添加一个条件,如果单词数为奇数,则将最后一个单词从第一部分移动到第二部分