2014-09-17 3 views
0

У меня есть строка:Подсчитайте количество определенного символа в строке с текстом разделителем

$output = "Program: First 0 0 0 0 0 0 0 Program: Second 0 0 0 0 0 Program: Third 0 0 0 0 0 0 0 0"; 

мне нужен этот вывод:

$output = "Program: First 7 Program: Second 5 Program: Third 8"; 

Я знаю, что могу рассчитывать все «0» вхождений с «substr_count », но как я могу подсчитать определенную группу нулей перед текстом« Программа »?

ответ

2

Это точно выводит то, что вам нужно. Его не так красиво, у может найти лучшее решение с Google, но это просто пришло мне в голову:

<?php 

$output = "Program: First 0 0 0 0 0 0 0 Program: Second 0 0 0 0 0 Program: Third 0 0 0 0 0 0 0 0"; 

$output = explode("Program:", $output); 
array_splice($output, 0,1); 
$endString = ''; 
foreach($output as $elem) { 
    $count = substr_count($elem, "0"); 
    $elemWithoutZero = str_replace('0', '', $elem); 
    $endString = $endString . 'Program: ' . $elemWithoutZero . $count . ' '; 
} 
var_dump($endString); 


?> 

Выход:

string(74) "Program: First 7 Program: Second 5 Program: Third 8" 

В любом случае, если вы получите, что тип данных, вы можете найти лучшее решение в том месте, где вы создаете эти данные.

+0

Спасибо, это работает. – kostya572

+0

@ user2337706 Надеюсь, вы понимаете, что там происходит, поэтому вы можете написать это в следующий раз :) – Xatenev

+0

Да, я проанализирую его. Я не люблю беспокоить людей, но когда-нибудь я могу потратить часы, чтобы написать такой простой код) – kostya572

1

substr_count может быть предоставлена ​​максимальная длина для подсчета до. Просто используйте strpos, чтобы найти индекс «Второго» и подсчитать 0 до этого индекса. Вы также можете предоставить «substr_count» смещение, поэтому начните со смещения для следующего диапазона нулей.

substr_count Documentation

2

Может это сделать:

$output = "Program: First 0 0 0 0 0 0 0 Program: Second 0 0 0 0 0 Program: Third 0 0 0 0 0 0 0 0"; 
$pieces = explode('Program',$output); 
foreach($pieces as $piece){ 
    echo substr_count($piece, '0').PHP_EOL; 
} 

Выход:

0 
7 
5 
8 

Другой способ:

$programs = Array('First','Second','Third'); 
$output = "Program: First 0 0 0 0 0 0 0 Program: Second 0 0 0 0 0 Program: Third 0 0 0 0 0 0 0 0"; 
$pieces = explode(' Program:',$output); 
$looutput = ''; 
$i = 0; 
foreach($pieces as $piece){ 
    $loutput .= 'Program: '.$programs[$i].' '.substr_count($piece, '0').' '; 
    $i++; 
} 
echo $loutput; 

Выход:

Program: First 7 Program: Second 5 Program: Third 8 
+0

неплохо, но это не экономит Программу: сначала, вторая для текущего выхода. – kostya572

+0

Ваш вопрос: «Как я могу подсчитать определенную группу нулей перед текстовой программой», тогда я подумал, зная количество нулей, не знай о замене. – Carlos

+0

Вы правы. Ваш ответ отвечает на вопрос. – kostya572