Вывод(php)

-
На сайте с 14.12.2011
Offline
14
596

Есть файл с таким содержанием:

[{"newname":"name1\u00a4","timechanged":"2 June 2012 @ 6:14am"},{"newname":"name2\u00b7","timechanged":"2 June 2012 @ 6:14am"},{"newname":"name3\u00a6","timechanged":"2 June 2012 @ 6:18am"}]

Надо вывести значения "newname", и чтобы код символа после name1, name2, name3 поеобразовывался в символ, соответствующий этому коду.

В итоге должно получиться вот это:

name1¤

name2·

name3¦

Подскажите знающие, как это сделать.

fedimen
На сайте с 16.05.2012
Offline
3
#1

Если надо коды преобразовать в символы, то можно сделать так:

function to_utf8 ($str) {

$str = preg_replace ('/\\\\u([0-9a-f]{4})/i', '***x${1};', $str);
return html_entity_decode ($str, ENT_NOQUOTES, 'UTF-8');
}

Но если это для вывода в браузер, то можно сделать так:

function to_utf8 ($str) {

return preg_replace ('/\\\\u([0-9a-f]{4})/i', '***x${1};', $str);
}

P.S. Форум заменяет символы в коде, потому пример в аттаче.

zip test.zip
Занимаюсь написанием программ и скриптов на заказ (/ru/forum/717537):
ICQ: 600382789, Skype: fedimen, Е-Маil: fedimen (пудель) gmail (точка) com
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#2


<?php
error_reporting(E_ALL);
$text = '{newname":"name1\u00a4","timechanged":"2 June 2012 @ 6:14am"},{"newname":"name2\u00b7","timechanged":"2 June 2012 @ 6:14am"},{"newname":"name3\u00a6","timechanged":"2 June 2012 @ 6:18am"}';
$arr = explode(',',$text);
for($i=0; isset($arr[$i]); $i=$i+2)
{
$arr2 = explode(':',$arr[$i]);
$arr3 = explode('\\',$arr2[1]);
$name = substr($arr3[0], 1);
$symbol = substr($arr3[1], 1, strlen($arr3[1])-2);//код символа
echo "$name" .mb_convert_encoding("***x$symbol;", 'UTF-8', 'HTML-ENTITIES') ."<br>";
}
?>
Подпись))
S5
На сайте с 04.01.2010
Offline
77
#3

А не кто не обратил внимание что переменная вообще в JSON-овском формате?))

$l = json_decode($data, TRUE);

А далее обрабатываем $l как обычный массив

DP
На сайте с 24.04.2012
Offline
16
#4

Это формат json, с ним не надо извращаться. Стандартные библиотеки php все это делают сами.


<?
$text = '[{"newname":"name1\u00a4","timechanged":"2 June 2012 @ 6:14am"},{"newname":"name2\u00b7","timechanged":"2 June 2012 @ 6:14am"},{"newname":"name3\u00a6","timechanged":"2 June 2012 @ 6:18am"}]';
$arr = json_decode($text);
foreach($arr as $value)
{
echo $value->newname;
echo "<br />";
}
?>
-
На сайте с 14.12.2011
Offline
14
#5

Спасибо всем, помогли :)

-
На сайте с 14.12.2011
Offline
14
#6

Еще такой вопрос появилася: как можно отсортировать этот массив по дате "timechanged"?

Т.е надо вывести "newname" и соответствующий ему "timechanged" в правильном порядке.

[{"newname":"name1","timechanged":"June 2nd, 2012 @ 10:50pm"},{"newname":"name8","timechanged":"June 2nd, 2012 @ 10:15pm"},{"newname":"name10","timechanged":"June 2nd, 2012 @ 10:05pm"},{"newname":"name7","timechanged":"June 2nd, 2012 @ 10:20pm"},{"newname":"name5","timechanged":"June 2nd, 2012 @ 6:30am"},{"newname":"name9","timechanged":"June 2nd, 2012 @ 10:10pm"},{"newname":"name2","timechanged":"June 2nd, 2012 @ 10:45pm"},{"newname":"name3","timechanged":"June 2nd, 2012 @ 10:40pm"},{"newname":"name6","timechanged":"June 2nd, 2012 @ 10:25pm"},{"newname":"name4","timechanged":"June 2nd, 2012 @ 10:35pm"}]
S5
На сайте с 04.01.2010
Offline
77
#7

...

foreach ($l as $value){

echo($value['newname']);

echo($value['timechanged']);

}

DP
На сайте с 24.04.2012
Offline
16
#8

<?

$text = '[{"newname":"name1","timechanged":"June 2nd, 2012 @ 10:50pm"},{"newname":"name8","timechanged":"June 2nd, 2012 @ 10:15pm"},{"newname":"name10","timechanged":"June 2nd, 2012 @ 10:05pm"},{"newname":"name7","timechanged":"June 2nd, 2012 @ 10:20pm"},{"newname":"name5","timechanged":"June 2nd, 2012 @ 6:30am"},{"newname":"name9","timechanged":"June 2nd, 2012 @ 10:10pm"},{"newname":"name2","timechanged":"June 2nd, 2012 @ 10:45pm"},{"newname":"name3","timechanged":"June 2nd, 2012 @ 10:40pm"},{"newname":"name6","timechanged":"June 2nd, 2012 @ 10:25pm"},{"newname":"name4","timechanged":"June 2nd, 2012 @ 10:35pm"}]';
$arr = json_decode($text);
function cmp($a, $b)
{
$time1 = strtotime(str_replace("@ ", "", $a->timechanged));
$time2 = strtotime(str_replace("@ ", "", $b->timechanged));
if($time1 >= $time2)
return 1;
else
return -1;

}
usort($arr, "cmp");

foreach($arr as $value)
{
echo $value->newname." ".$value->timechanged;
echo "<br />";
}
?>

На выходе:


name5 June 2nd, 2012 @ 6:30am
name10 June 2nd, 2012 @ 10:05pm
name9 June 2nd, 2012 @ 10:10pm
name8 June 2nd, 2012 @ 10:15pm
name7 June 2nd, 2012 @ 10:20pm
name6 June 2nd, 2012 @ 10:25pm
name4 June 2nd, 2012 @ 10:35pm
name3 June 2nd, 2012 @ 10:40pm
name2 June 2nd, 2012 @ 10:45pm
name1 June 2nd, 2012 @ 10:50pm
-
На сайте с 14.12.2011
Offline
14
#9

developer_php, то, что нужно. Еще раз спасибо

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий