2012-04-08 146 views
0

我使用curl从网站获取一些数据。我对其进行处理后,我设法得到它的这种状态:将对象重写为数组?

Array ( 
[GraphicRiver] => Array ([0] => stdClass Object 
    ( 
     [id] => 698515 
     [item] => Alien Icons Set 
     [url] => http://graphicriver.net/item/alien-icons-set/698515 
     [user] => chaoscod3r 
     [thumbnail] => http://2.s3.envato.com/files/23574322/Thumb.jpg 
     [sales] => 5 
     [rating] => 0 
     [cost] => 5.00 
     [uploaded_on] => Mon Oct 24 17:16:20 +1100 2011 
     [tags] => alien icons, clean icons, easy editing, icons pack, minimalist icons pack, resizable, simple icons, vector icons, vector shapes 
     [category] => icons/miscellaneous 
     [live_preview_url] => http://3.s3.envato.com/files/23574321/Preview.jpg 
    ) 
) 

) 

但我想拥有的而不是stdClass的对象是数组,所以我怎么改写这个类型的数组,使该对象和数组?

这是我用得到什么上面的方法:

public function all_items_by_site($user_name) { 

    $items_by_marketplace = $this->user_items_by_site($user_name); 

    $marketplaces = array(); 

    $items = array(); 

    foreach ($items_by_marketplace as $key) { 
    $marketplaces[] = array(
     'Marketplace' => $key->site, 
     'Items'  => $key->items 
    ); 
    } 

    foreach ($marketplaces as $key) { 
    $items[$key['Marketplace']] = $this->new_files_from_user($user_name, $key['Marketplace']); 
    } 

    return $items; 

} 

我使用这个API包装为基础API包装什么,我想开发:https://github.com/JeffreyWay/Envato-Marketplace-API-Wrapper-in-PHP

+1

在一个侧面说明,ENVATO有一个API为他们的市场的网站,它可能使你的工作变得更轻松:HTTP:// marketplace.envato.com/api/documentation – BenOfTheNorth 2012-04-08 13:20:47

+0

是的,我已经在使用它,但它将数据作为对象返回。我需要它作为数组,我更容易在数据库中使用它。 – Roland 2012-04-08 13:30:12

回答

6

您可以轻松地投stdClass对象的数组:

$array = (array)$object; 

在你的具体情况,这将是:

foreach ($array['GraphicRiver'] as &$item) { 
    $item = (array)$item; 
} 
unset($item); 
+0

我会尝试一下,看看我得到了什么:) – Roland 2012-04-08 13:30:42

+0

事情是,我没有这样的数组,实际上只有一个键,(我在谈论“GraphicRiver”),因为还有其他的按键,比如“CodeCanyon”等等,每一个都有相同的结构。所以我需要将其应用于所有的键。我用一些代码示例更新了我的问题。 – Roland 2012-04-08 13:39:37

1

最简单的方法来做到这一点(虽然这不是真正的语义方式)是使用json_encodejson_decode这样的组合:

$array = json_decode(json_encode($orig), true); 

这很容易,但我不会为大数组推荐它。
另一种方式是通过循环您的阵列和应用型铸造用(array)

$array = array_map(function($el) { 
    return (array)$el; 
}, $orig); 
+0

这是一个很大的数组,有很多数据。 – Roland 2012-04-08 13:34:11

+0

json的方法没有问题,但看起来像第二个没有问题。感谢您的解决方案。我希望它不会为比我现在拥有的更大的阵列造成问题。 – Roland 2012-04-08 15:02:16