substr_count zwraca 0 mimo istnienia znaku.

0

Cześć,
Mam string:

$csv = 'Aleksandrów Kujawski;aleksandrowski;kujawsko-pomorskie;7,23;12 487;1727:
			Aleksandrów Łódzki;zgierski;łódzkie;13,82;21 224;1536:
			Alwernia;chrzanowski;małopolskie;8,88;3435;387:
			Andrychów;wadowicki;małopolskie;10,33;20 993;2032:
			Annopol;kraśnicki;lubelskie;7,73;2624;339:
			Augustów;augustowski;podlaskie;80,90;30 482;377:
			Babimost;zielonogórski;lubuskie;3,65;3999;1096:
			Baborów;głubczycki;opolskie;11,86;3009;254:
			Baranów Sandomierski;tarnobrzeski;podkarpackie;9,15;1463;160:
			Barcin;żniński;kujawsko-pomorskie;3,70;7655;2069:
			Barczewo;olsztyński;warmińsko-mazurskie;4,58;7280;1590:
			Bardo;ząbkowicki;dolnośląskie;4,71;2705;574:
			Barlinek;myśliborski;zachodniopomorskie;17,55;14 180;808:
			Bartoszyce;bartoszycki;warmińsko-mazurskie;11,79;24 432;2072:
			Barwice;szczecinecki;zachodniopomorskie;7,52;3800;505:
			Bełchatów;bełchatowski;łódzkie;34,64;59 305;1712:';

Używam na nim funkcji substr_count() :

substr_count(':', $csv);

Które zwraca 0 mimo tego że (jak widać) dwukropki są. Wiecie może na czym polega mój błąd? W dokumentacji nic nie znalazłem. PHP7.

2

spróbuj

substr_count($csv, ':');
0

A zwykłe koło jest jakieś złe, że robisz swoje?

http://php.net/manual/pl/function.fgetcsv.php

0

@dzek69 Zrobiłem testy i moja funkcja bije fgetcsv na głowę. Założyłem jedną rzecz. Nazwy mają być nazwami z pierwszego wiersza. Oto wyniki:
fgetcsv:
Czas wykonania pętli 0 : 0.053912878036499
Czas wykonania pętli 1 : 0.051183938980103
Czas wykonania pętli 2 : 0.05070686340332
Czas wykonania pętli 3 : 0.050235033035278
Czas wykonania pętli 4 : 0.049675941467285

csv2json:
Czas wykonania pętli 0 : 0.022540092468262
Czas wykonania pętli 1 : 0.023590087890625
Czas wykonania pętli 2 : 0.02072811126709
Czas wykonania pętli 3 : 0.022803068161011
Czas wykonania pętli 4 : 0.020849943161011

Kod z użyciem fgetcsv:

for($i = 0; $i < 5; $i++){
	$t1 = microtime(true);
	$handle = fopen('test.csv', 'rb');
	$header = fgetcsv($handle, 0, ',');
	$k = 0;
	while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
		for($j = 0; $j < count($data); $j++){
			$arr[$k][$header[$j]] = $data[$j];
		}
		$k++;
	}
	$t2 = microtime(true);
	echo 'Czas wykonania pętli '.$i.' : ';
	echo $t2 - $t1;
	echo "<br>";
}

Kod z użyciem csv2json:

for($i = 0; $i < 5; $i++){
	$t1 = microtime(true);
	require_once('csv2json.php');
	$obj = new csv2json();
	$csv = file_get_contents('test.csv');
	$json = $obj->getJson($csv);
	$t2 = microtime(true);
	echo 'Czas wykonania pętli '.$i.' : ';
	echo $t2 - $t1;
	echo "<br>";
}

Dane na których testowałem (4000 linij) : http://pastebin.com/2HHJ53aU

Klasa csv2json dostępna na moim github'ie: https://github.com/NickOver

Teraz jeszcze zauważyłem że przy użyciu fgetcsv nie puszczam tego przez json_encode().

0

To teraz porównaj sobie wyniki i zobacz które są poprawne, a które nie :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1