2015-08-31 3 views
0

У меня следующий результат mysql php array.php удалить все перед символом

while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) 
{ 
echo '<tr>'; 
echo "<td> {$row['cust']} </td>". 
    "<td> {$row['manu']} </td>". 
    "<td> {$row['model']} </td>". 
    "<td> {$row['serial']} </td>". 
    "<td> {$row['capacity']} </td>". 
    "<td> {$row['firmware']} </td>". 
    "<td> {$row['deviceid']} </td>". 
    "<td> {$row['ataver']} </td>". 
    "<td> {$row['ltime']} </td>". 
    "<td> {$row['date']} </td>". 
    "<td> {$row['ourref']} </td>". 
    "<td> {$row['result']} </td>"; 


/**      foreach($row as $key=>$value) { 
           echo '<td>',$value,'</td>'; 
         }*/ 
         echo '</tr>'; 

"<td> {$row['capacity']} </td>". массив содержит информацию, как

250000000000 bytes [250 GB] 
400000000000 bytes [400 GB] 
500000000000 bytes [500 GB] 

Я хочу, чтобы удалить все, включая байт.

Таким образом, желаемый результат будет выглядеть

250 GB 
400 GB 
500 GB 

Как я могу добиться этого с помощью выше кода?

Спасибо заблаговременно.

+0

начать использовать эти: http://php.net/manual/en/ref. strings.php –

+0

Вы просто хотите удалить 000000000 и добавить GB ... Используйте str_replace – Hearner

+0

Если вы можете, вы должны [прекратить использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt- я использование м ysql-функции-в-PHP). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) [заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) и рассмотрите возможность использования PDO , [это действительно не сложно] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

0

Вы можете использовать регулярные выражения для достижения этой цели:

preg_match('/\[(.*?)\]/', $row['capacity'], $matches); 
if (isset($matches[1])) { 
    $row['capacity'] = $matches[1]; 
} 
echo "<td> {$row['capacity']} </td>"; 
+0

Perfect работает абсолютно нормально – user2107349

0

Есть много способов сделать это, я хотел бы использовать регулярное выражение, чтобы захватить все Inbetween скобки.

$string = '250000000000 bytes [250 GB] 
400000000000 bytes [400 GB] 
500000000000 bytes [500 GB]'; 
preg_match_all('~\[(.*?)\]~', $string, $sizes); 
print_r($sizes[1]); 

Выход:

Array 
(
    [0] => 250 GB 
    [1] => 400 GB 
    [2] => 500 GB 
) 

Regex101 Демонстрация: https://regex101.com/r/zR6pU1/1

. это любой символ, то * равен нулю или более вхождений any character и ? останавливается на первом наступлении следующего персонаж. + может быть лучшим квантификатором, чтобы вы были уверены, что там что-то есть. + - это одно или несколько вхождений.

С + квантором

$string = '250000000000 bytes [250 GB] 
400000000000 bytes [400 GB] 
500000000000 bytes [500 GB]'; 
preg_match_all('~\[(.+?)\]~', $string, $sizes); 
print_r($sizes[1]); 

Если вы хотите быть строже, вы можете даже сделать:

$string = '250000000000 bytes [250 GB] 
400000000000 bytes [400 GB] 
500000000000 bytes [500 GB]'; 
preg_match_all('~\[(\d+ [MKG]B)\]~', $string, $sizes); 
print_r($sizes[1]); 

Какого бы соответствовать любым цифрам пространства, а затем КБ, МБ или ГБ. [] является символьным классом, позволяющим присутствовать любой из буквенных символов внутри.

+0

Прекратите использование регулярных выражений для таких простых вещей .... – MozzieMD

+1

@MozzieMD это не должно быть простой вещью. Его можно использовать, чтобы быть более точным в отношении данных, которые вы принимаете. – chris85

+1

В этом случае вы можете просто взорваться '[' и replace ']' regex будет использовать гораздо больше ресурсов для такой крошечной задачи! – MozzieMD

1

Это довольно просто, смотрите здесь:

$String = "250000000000 bytes [250 GB]"; 

$String2 = substr($String, 0, 3); // take the first 3 caracteres 

$result = $String2." GB"; // Just add GB after 
echo $result; 

Просто замените "<td> {$row['capacity']} </td>". с парованием

"<td>".substr($String, 0, 3)." GB</td>". 
0

Вы можете использовать:

$str = preg_replace('[[:digit:]]+ Bytes ', "", $str); 

https://regex101.com/r/fE7nO5/1

Затем str_replace для замены символов [].

$str = str_replace('[', ' ', $str); 
$str = str_replace(']', ' ', $str); 
$str = trim($str); 

Edit: Вы также можете сделать это с одним регулярным выражением:

$str = preg_replace('[[:digit:]]+ Bytes |\[|\]', "", $str); 

https://regex101.com/r/fE7nO5/2

Смежные вопросы