PHP String ayrıştırıcı / ayırma

4 Cevap php

Ben, bu formda EG ben bir metin yapıştırılacak isteyen bilgi olacak var

Ryu Aiter D78:21:87:13 177 /177 1 / 6
Ryu Chronos D78:21:26:21 182 /182 0 / 6
Ryu Hermes D78:21:26:22 201 /201 0 / 6
Ryu Hefaistos D78:31:75:10 136 /136 1 / 2
Ryu Krotos D78:84:96:11 170 /170 1 / 6
Ryu Heros D78:65:51:31 175 /175 2 / 5
Ryu Arachnos D78:13:84:11 185 /185 0 / 5

its splits up like this
Base(max 16 chars)
Location(staring D , 12 chars)
econ/max econ (int/int)
used/Total(int/int)

What i wish to do is create a loop for each Row of text, and then inside that loop chop out each part of the row into variables for each component.

as far as ideas on separating it i know that the : symbol is banned from names and bases. so if i find the first ":" then step back 2 and take the next 12 chars that is my location i know that can be done with a until loop and if(string[x]=':')

But how do i loops through rows? And how can i separate the rest of the data in a row?

4 Cevap

P bu deneyin: Bu normal ifadeler için ne olduğunu:

$lines = explode( "\r\n", $data );

$users = array();

foreach( $lines as $line )
{
    $matches = array();
    $user = array();

    preg_match( "/([^ ]+) ([^ ]+) ((?:[A-Z])(?:[0-9]+:){3}[0-9]+) ([0-9]+) \/([0-9]+) ([0-9]+) \/ ([0-9]+)/", $line, $matches );

    list(,$user['name'],$user['base'],$user['location'],$user['econ'],$user['maxecon'],$user['used'],$user['total']) = $matches;

    $users[] = $user;
}

Sen bileşenleri ile birleşmeli diziler içeren bir dizi kullanıcıların adında bir dizi olacak. Aşağıdaki gibi ...

Array
(
[0] => Array
    (
        [total] => 6
        [used] => 1
        [maxecon] => 177
        [econ] => 177
        [location] => D78:21:87:13
        [base] => Aiter
        [name] => Ryu
    )

[1] => Array
    (
        [total] => 6
        [used] => 0
        [maxecon] => 182
        [econ] => 182
        [location] => D78:21:26:21
        [base] => Chronos
        [name] => Ryu
    )

etc, etc...

EDIT: Eğer birçok ayrıntı vermediği gibi bana bildirin ifade ile daha fazla yardıma ihtiyacınız varsa ben, veriler hakkında varsayımlar bir sürü yaptı.

GÜNCELLEME SİZİN YORUM AS PER:

Line 182: $name = htmlspecialchars(mysql_real_escape_string($_POST['name']));
Line 188: $tecon = htmlspecialchars(mysql_real_escape_string($user['econ']));

Kolayca ayıklanmış olabilir basit sözdizimi hataları vardı gibi display_errors açmalısınız.

Eğer sadece kullanmak explode ve yavaş yavaş bunu yıkmak miyim?

örn.

  • '\ n' de ayrı satırlara giriş patlayabilir
  • ':' O, 2'ye 1 önce her şeyi her satırı patlayabilir, ve sonra her şey
  • , Bankası'nda, konumu İsim vermek her 'boşluk' kullanarak parçalar halinde 1. bölüm patlayabilir
  • ':' boşluk 'kullanarak 2. kısım, patlayabilir veya' / 'size econ / max econ ve kullanılan / Toplam vermek
if(preg_match_all('/^([a-z]{1,16})\s+([a-z]{1,16})\s+(D\d+):(\d+):(\d+):(\d+)\s+(\d+)\s+\/(\d+)\s+(\d+)\s+\/\s+(\d+)$/mi', $yourinputgoeshere, $match) {
    print_r($match);
}

Bu, denenmemiş, büyük bir diziye, her şeyi ayrılmış almalısınız. Denenmemiş

I başka bir sayfada tek bir hat için gebelik maç kullanmaya çalışıyorum aynı fikri uzatılması.

i kodu kullanabilirsiniz

			$data = $_POST['list'];

			$matches = array();
			$user = array();			
			preg_match( "/(.+?) ((?:[A-Z])(?:[0-9]+:){3}[0-9]+) ([0-9]+) \/([0-9]+) ([0-9]+) \/ ([0-9]+)/", $data, $matches ); 
			list(,$user['base'],$user['location'],$user['econ'],$user['maxecon'],$user['used'],$user['total']) = $matches;

			$base = $users['base'];
			$location = $users['location'];
			$tecon = $users['econ'];

i £ verileri yazdırmak için eko kullanılan ve beklendiği gibi verileri içeren ama çizgiler döngü olmadan aynı kod aslında $ kullanıcının dizi boyutu gitti ne, boş kalır .. diziye benim veri parçalarını ayırmak değil wroung?