2017-01-31 3 views
0

В моем двумерном массиве значение ключа массива [1] пуст, а значение имени ключа [4], [5], [6], [7 ], [8] предположим, что пуст, но он показывает, что в значениях массивов есть строка (2). Я думаю, что две строки могут быть двумя пробелами, и я пробовал различные методы, такие как preg_replace, str_replace, trim, array_map, array_filter, не удалять или не удалять два пробела, все функции, которые я использовал, не обнаружены что два пространства в виде пробелов. Кроме того, я также пытаюсь использовать preg_replace, str_replace, чтобы заменить два пробела другой строкой. Но меняются только значения массива и имя ключа [1] ... Я не знаю, почему две строки не распознаются как пробелы. Кроме того, я также попытался перепечатать те же массивы в новом php-файле и отладить его, заменив значения массива ключей [4], [5], [6], [7], [8] двумя пробелами. Тем не менее, функция, способная обнаруживать, что все это пробелы, но следующие массивы, я размещаю здесь два пробела вместо пробелов, очевидно, что они одни и те же.PHP не удаляет пробелы из массивов

[1]=> 
    array(9) { 
    [0]=> 
    string(5) "Johor" 
    [1]=> 
    string(0) "" 
    [2]=> 
    string(10) "KotaTinggi" 
    [3]=> 
    string(3) "29*" 
    [4]=> 
    string(2) " " 
    [5]=> 
    string(2) " " 
    [6]=> 
    string(2) " " 
    [7]=> 
    string(2) " " 
    [8]=> 
    string(2) " " 
    } 

Вот код, который я использовал. Массивы соскабливаются с помощью завитка с веб-сайта.

<?php 
$ch = curl_init("http://apims.doe.gov.my/v2/hour3_2017-01-31.html"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$page = curl_exec($ch); 
$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadHTML($page); 
libxml_clear_errors(); 
$xpath = new DOMXpath($dom); 
$data = array(); 

$table_rows = $xpath->query('//tr'); 
foreach ($table_rows as $row => $tr) { 
    foreach ($tr->childNodes as $td) { 
     $data[$row][] = preg_replace('/\s+/', '', trim($td->nodeValue," ")); 
    } 
} 
var_dump($data); 
?> 

Я также пытаюсь с этим. Но все они не работают. Любой профессионал может мне помочь? или дать мне некоторое решение.

$data[$row][] = preg_replace('/\s+/', '', str_replace(' ','',$td->nodeValue)); 
+0

Я вижу специальные символы в полях типа 'Â'. –

+0

@Suchit Как я могу удалить его? Я использую preg_replace с \ s может удалить его. – SinB

+0

, если вы ожидаете только числа и символы, которые вы можете использовать: 'preg_replace ("/[^ a-zA-Z0-9]/"," ", $ td-> nodeValue);' –

ответ

1

Если вы ожидаете символы и цифры, которые можно использовать это (сохраняя * в строке):

preg_replace("/[^a-zA-Z0-9\*]/", "", $td->nodeValue);// this will remove spaces from a proper string also. 

или

$data[$row][] = preg_replace("/[^ \w\*]+/", "", $td->nodeValue);// this works better and does not remove spaces 
0

Если вы посмотрите на сайте, пространство на самом деле является &nbsp; строки, так что следующий должны сделать:

$data[$row][] = preg_replace('/\&nbsp;/', '', trim($td->nodeValue," ")); 
Смежные вопросы