PHP: Json çözme soru

2 Cevap php

How do i decode whole feed arround 10k item without memory limit of php? i found a code which break the feed to part: http://pastebin.com/m43c3384f

nasıl aşağıda besleme ile çalışmak için kodunu değiştirmek yapın:

GAF_update_projects_vertical_callback({"projects":{"count":2,"items":[{"id":502817,"name":"SEO","url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FSEO%2FSEO.502817.html","start_unixtime":1252386582,"start_date":"Tue, 08 Sep 2009 01:09:42 -0400","end_unixtime":1252818582,"end_date":"Sun, 13 Sep 2009 01:09:42 -0400","buyer":{"url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F1094422.html","id":1094422,"username":"eyalbiber"},"state":"A","short_descr":"Hi,  My name is Eyal.  I'm looking for seo expert to work with him on long term relationship.  I need...","options":{"featured":0,"nonpublic":0,"trial":0,"fulltime":0,"for_gold_members":0,"hidden_bids":0},"budget":{"min":30,"max":250},"jobs":["SEO"],"bid_stats":{"count":0,"avg":false}},{"id":503874,"name":"websubmissionarticles","url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FCopywriting%2Fwebsubmissionarticles.html","start_unixtime":1252386528,"start_date":"Tue, 08 Sep 2009 01:08:48 -0400","end_unixtime":1252559328,"end_date":"Thu, 10 Sep 2009 01:08:48 -0400","buyer":{"url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F39628.html","id":39628,"username":"seexpert"},"state":"A","short_descr":"need some1 to rewrite articles by taking them from the net from various min 5 sources. he\/she can draft...","options":{"featured":0,"nonpublic":0,"trial":0,"fulltime":0,"for_gold_members":0,"hidden_bids":0},"budget":{"min":30,"max":250},"jobs":["Copywriting"],"bid_stats":{"count":0,"avg":false}}]}})

Ben aşağıda bu kod çalıştı:

<?php
require("JSON.php");

$mochi_url = "http://api.getafreelancer.com/Project/Search.json?aff=480992&callback=GAF_update_projects_vertical_callback&order=submitdate&count=50&iads=true&nonpublic=0&charset=UTF-8";
$feed = file_get_contents($mochi_url);

$feed_start=strpos($feed,"[{");

$feed = substr($feed,$feed_start+1);
$feed = substr($feed,0,strlen($feed)-2);
$games = explode("{\"id\": \"",$feed);
unset($feed);
for($x=1;$x<=count($games);$x++){
     $games[$x] = "{\"name\": \"".$games[$x];
     $games[$x] = substr($games[$x],0,strlen($games[$x])-2);
     $games_decode = json_decode($games[$x], true);

     foreach($games_decode as $varname => $varvalue) {
          $mochi[$varname] = $varvalue;
     }

                $name = $mochi['name'];



                  echo "$x - Name: {$mochi['name']} <br>"; 
                unset ($games[$x]);
}

?>

bana dönmek

Warning: Invalid argument supplied for foreach() in /home/studiox/public_html/getafreelancer/auto.php on line 18 1 - Name:

Herhangi bir fikir?

2 Cevap

Her şeyden önce, sizin json dize kaçış. Bu gibi:

$json_string = "{\"projects\":{\"count\":2,\"items\":[{\"id\":502817,\"name\":\"SEO\",\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FSEO%2FSEO.502817.html\",\"start_unixtime\":1252386582,\"start_date\":\"Tue, 08 Sep 2009 01:09:42 -0400\",\"end_unixtime\":1252818582,\"end_date\":\"Sun, 13 Sep 2009 01:09:42 -0400\",\"buyer\":{\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F1094422.html\",\"id\":1094422,\"username\":\"eyalbiber\"},\"state\":\"A\",\"short_descr\":\"Hi,  My name is Eyal.  I'm looking for seo expert to work with him on long term relationship.  I need...\",\"options\":{\"featured\":0,\"nonpublic\":0,\"trial\":0,\"fulltime\":0,\"for_gold_members\":0,\"hidden_bids\":0},\"budget\":{\"min\":30,\"max\":250},\"jobs\":[\"SEO\"],\"bid_stats\":{\"count\":0,\"avg\":false}},{\"id\":503874,\"name\":\"websubmissionarticles\",\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FCopywriting%2Fwebsubmissionarticles.html\",\"start_unixtime\":1252386528,\"start_date\":\"Tue, 08 Sep 2009 01:08:48 -0400\",\"end_unixtime\":1252559328,\"end_date\":\"Thu, 10 Sep 2009 01:08:48 -0400\",\"buyer\":{\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F39628.html\",\"id\":39628,\"username\":\"seexpert\"},\"state\":\"A\",\"short_descr\":\"need some1 to rewrite articles by taking them from the net from various min 5 sources. he\/she can draft...\",\"options\":{\"featured\":0,\"nonpublic\":0,\"trial\":0,\"fulltime\":0,\"for_gold_members\":0,\"hidden_bids\":0},\"budget\":{\"min\":30,\"max\":250},\"jobs\":[\"Copywriting\"],\"bid_stats\":{\"count\":0,\"avg\":false}}]}}";

PHP yerli JSON desteği vardır. Sen json_decode PHP kullanarak ilişkisel dizi doğrudan json dize çözmek olabilir ():

$result = json_decode($json_string, true);

Test:

echo $result['projects']['items'][0]['name'];
echo '<br>';
echo $result['projects']['items'][0]['url'];

Sonuç:

SEO
http://www.getafreelancer.com/affiliates/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FSEO%2FSEO.502817.html


UPDATE:

Answering question: Ne ben JSON besleme içindeki birçok proje var ve ben mysql saklamak için döngü her birini istiyorsanız yapmanız.

Bu gerçekten JSON ile ilgili değil, daha ziyade PHP diziler için. Kullanabileceğiniz PHP içine gömülü kullanışlı fonksiyon bir çok şey var. Bu durumda ihtiyacınız olan tüm projeler için dizi elemanı sayısı (okuyun: projelerin miktarı) bilmek, o zaman basit bir döngü kullanarak dizinin dışında tüm verileri ayıklamak.

for($i = 0; $i < count($result['projects']['items']); $i++) {
  $project_name = $result['projects']['items'][$i]['name'];
  $project_id   = $result['projects']['items'][$i]['id'];
  $project_date = $result['projects']['items'][$i]['start_date'];

  // save / print / do whatever you want with this data
  echo "Project : $project_name [$project_id] - $project_date<br>";
}

P.S. Güzel PHP dizi adım-adım öğretici here.

Sadece bellek tükeniyor ediyorsanız, (varsayılan 8 MB olabilir, ama emin değilim) varsayılan daha büyük bir şey için php.ini olarak memory_limit parametresini değiştirmeyi deneyin .

Drupal.org üzerinde Increase PHP memory limit sayfa bellek sınırı artırmak için başka yollar örnekleri vardır.