str_replace не работает должным образом — многобайтовый набор символов?

У меня проблема с пробелами в массиве $a2, Я хотел бы заменить " " с "",

Я старался

$a2 = str_replace(" ", "", $a2);

и даже :

function str_replace_json($search, $replace, $subject) {
return json_decode(str_replace($search, $replace, json_encode($subject)), true);
}
$a2 = str_replace_json(" ", "", $a2);

Но это урезает пробелы только до и после числа (не внутри).

Мой массив:

$a2 =  array( $rowData[3][1],
$rowData[3][2],
$rowData[3][3],
$rowData[3][4],
$rowData[3][5],
$rowData[3][6],
$rowData[3][7]
);

var_dump моего массива:

array(7) {  [0]=> string(54) " 155 808.00 "[1]=> string(54) " 131 256.00 "[2]=> string(54) " 106 008.00 "[3]=> string(53) " 60 600.00 "[4]=> string(53) " 41 520.00 "[5]=> string(52) " 5 880.00 "[6]=> string(52) " 6 744.00 "}

Что может быть причиной для этого?

РЕДАКТИРОВАТЬ
Когда я объявляю свой массив таким образом:

$a2 = array(
" 155 808.00 ",
" 131 256.00 ",
" 106 008.00 ",
" 60 600.00 ",
" 41 520.00 ",
" 5 880.00 ",
" 6 744.00 ");

Я могу легко обрезать все пробелы (в том числе внутри номеров).

Вот как я создаю $rowData

include_once ("includes/php/simple_html_dom.php");
$html = file_get_html('https://gaz.tge.pl/pl/rdn/gas/index/index/');
$table = $html->find("table[@class=t-02]",0);
$rowData = array();
foreach($table->find('tr') as $row) {
$data = array();
foreach($row->find('td') as $cell) {
$data[] = $cell->plaintext;
}
$rowData[] = $data;
}
array_unshift($rowData[0], "RDNpg");

var_dump из $rowData:

array(7) { [0]=> array(8) { [0]=> string(5) "RDNpg" [1]=> string(68) " Pn. 13/02 " [2]=> string(68) " Wt. 14/02 " [3]=> string(69) " Śr. 15/02 " [4]=> string(68) " Cz. 16/02 " [5]=> string(68) " Pt. 17/02 " [6]=> string(68) " So. 18/02 " [7]=> string(67) " N. 19/02 " } [1]=> array(1) { [0]=> string(40) " TGEgasDA " } [2]=> array(8) { [0]=> string(8) "PLN/MWh " [1]=> string(44) " 92.56 " [2]=> string(44) " 91.36 " [3]=> string(44) " 89.51 " [4]=> string(44) " 87.62 " [5]=> string(44) " 88.01 " [6]=> string(44) " 84.63 " [7]=> string(44) " 84.90 " } [3]=> array(8) { [0]=> string(4) "MWh " [1]=> string(54) " 155 808.00 " [2]=> string(54) " 131 256.00 " [3]=> string(54) " 106 008.00 " [4]=> string(53) " 60 600.00 " [5]=> string(53) " 41 520.00 " [6]=> string(52) " 5 880.00 " [7]=> string(52) " 6 744.00 " } [4]=> array(1) { [0]=> string(40) " TGEsgtDA " } [5]=> array(8) { [0]=> string(8) "PLN/MWh " [1]=> string(40) " - " [2]=> string(40) " - " [3]=> string(40) " - " [4]=> string(40) " - " [5]=> string(40) " - " [6]=> string(40) " - " [7]=> string(40) " - " } [6]=> array(8) { [0]=> string(4) "MWh " [1]=> string(40) " - " [2]=> string(40) " - " [3]=> string(40) " - " [4]=> string(40) " - " [5]=> string(40) " - " [6]=> string(40) " - " [7]=> string(40) " - " } } array(7) { [0]=> string(54) " 155 808.00 " [1]=> string(54) " 131 256.00 " [2]=> string(54) " 106 008.00 " [3]=> string(53) " 60 600.00 " [4]=> string(53) " 41 520.00 " [5]=> string(52) " 5 880.00 " [6]=> string(52) " 6 744.00 " }

А также json_encode($rowData);

[["RDNpg"," \t Pn. \t 13\/02 \t "," \t Wt. \t 14\/02 \t "," \t \u015ar. \t 15\/02 \t "," \t Cz. \t 16\/02 \t "," \t Pt. \t 17\/02 \t "," \t So. \t 18\/02 \t "," \t N. \t 19\/02 \t "],[" \t TGEgasDA \t "],["PLN\/MWh "," \t 92.56 \t "," \t 91.36 \t "," \t 89.51 \t "," \t 87.62 \t "," \t 88.01 \t "," \t 84.63 \t "," \t 84.90 \t "],["MWh "," \t 155 808.00 \t "," \t 131 256.00 \t "," \t 106 008.00 \t "," \t 60 600.00 \t "," \t 41 520.00 \t "," \t 5 880.00 \t "," \t 6 744.00 \t "],[" \t TGEsgtDA \t "],["PLN\/MWh "," \t - \t "," \t - \t "," \t - \t "," \t - \t "," \t - \t "," \t - \t "," \t - \t "],["MWh "," \t - \t "," \t - \t "," \t - \t "," \t - \t "," \t - \t "," \t - \t "," \t - \t "]]

РЕДАКТИРОВАТЬ 2 я использовал bin2hex() чтобы увидеть, что на самом деле внутри $a2 массив. Я получил:

20200920202020202020202020202020202020313535266e6273703b3830382e30302020200920202020202020202020202020202020
20200920202020202020202020202020202020313331266e6273703b3235362e30302020200920202020202020202020202020202020
20200920202020202020202020202020202020313036266e6273703b3030382e30302020200920202020202020202020202020202020
202009202020202020202020202020202020203630266e6273703b3630302e30302020200920202020202020202020202020202020
202009202020202020202020202020202020203431266e6273703b3532302e30302020200920202020202020202020202020202020
2020092020202020202020202020202020202035266e6273703b3838302e30302020200920202020202020202020202020202020
2020092020202020202020202020202020202036266e6273703b3734342e30302020200920202020202020202020202020202020

Прав ли я, что таинственное пространство — это пространство без перерывов?   и поэтому функция триммера с нормальным пространством не работает?

2

Решение

использование array_map, Код будет выглядеть так:

$originalArray = json_decode($jsonText, true);

$data = array_map(function($value){
return str_replace(" ", '', $value);
}, $originalArray);

var_dump($data);

Позже Править:
Похоже, изменились требования к задаче и те же входные данные.
Это также меняет все.
Вы можете увидеть здесь http://php.net/array_map как это работает, это проще и чище.

Итак, имея массив с этими данными (давайте возьмем только первое значение ключа)

// this is the actual data from the array
$a = "20200920202020202020202020202020202020313535266e6273703b3830382e30302020200920202020202020202020202020202020";

// make it readable
$b = hex2bin($a);

// see what is inside
var_dump($b);

var_dump вернет что-то вроде:

string(54) "                    155 808.00                     "

Так что у тебя есть   который состоит из 6 символов и отображается только один.

Какое решение я вижу в этом случае будет использовать trim функция для удаления пробелов из начала и конца строки, а затем использовать preg_replace удалить все нецифровые символы и точки.

$b = trim($b);
$b = preg_replace("/([^0-9\.]+)/", '', $b);

Результат будет тогда:

string(9) "155808.00"

Итак, конечный результат будет выглядеть так:

$data = array_map(function($value){
$value = trim($value);

return preg_replace("/([^0-9\.]+)/", '', $value);
}, $originalArray);
1

Другие решения

Попробуйте это:

<?php

$rowData = array(
array(
"RDNpg",
" Pn. 13/02 ",
" Wt. 14/02 ",
" Śr. 15/02 ",
" Cz. 16/02 ",
" Pt. 17/02 ",
" So. 18/02 ",
" N. 19/02 ",
),
array(" TGEgasDA "),
array(
"PLN/MWh ",
" 92.56 ",
" 91.36 ",
" 89.51 ",
" 87.62 ",
" 88.01 ",
" 84.63 ",
" 84.90 "),
array(
"MWh ",
" 155 808.00 ",
" 131 256.00 ",
" 106 008.00 ",
" 60 600.00 ",
" 41 520.00 ",
" 5 880.00 ",
" 6 744.00 "),
array(
" TGEsgtDA ",
),
array(
"PLN/MWh ",
" - ",
" - ",
" - ",
" - ",
" - ",
" - ",
" - "),
array(
"MWh ",
" - ",
" - ",
" - ",
" - ",
" - ",
" - ",
" - ")
);

$a2 = array($rowData[3][1], $rowData[3][2], $rowData[3][3], $rowData[3][4], $rowData[3][5], $rowData[3][6], $rowData[3][7]);

function trimmed($item)
{
return str_replace(" ", "", $item);
}

$a2trim = array_map('trimmed', $a2);
var_dump($a2trim);

Вот вывод:

array(7) {
[0]=>
string(9) "155808.00"[1]=>
string(9) "131256.00"[2]=>
string(9) "106008.00"[3]=>
string(8) "60600.00"[4]=>
string(8) "41520.00"[5]=>
string(7) "5880.00"[6]=>
string(7) "6744.00"}

Это будет применяться обрезается Функция для элементов в массиве.

2

вам нужно повторить

foreach($a2 as $index => $a2str){
$a2[$index] = str_replace(" ", "", $a2str);
}
0

Лично при удалении пробелов я использую Preg_replace, а не str_replace

Попробуй это:

preg_replace('/(\s)/gm', '', $a2);

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector