我怎样才能将这样的数组转换为对象?
[128] => Array
(
[status] => Figure A.
Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution.
)
[129] => Array
(
[status] => The other day at work, I had some spare time
)
)
我正在使用第三方存储系统,它只返回我的stdClass对象,无论我输入什么因为一些不明原因.所以我很想知道是否有办法将stdClass对象转换/转换为给定类型的完整对象.
例如,有些东西:
//$stdClass is an stdClass instance
$converted = (BusinessClass) $stdClass;
Run Code Online (Sandbox Code Playgroud)
我只是将stdClass转换为数组并将其提供给BusinessClass构造函数,但也许有一种方法可以恢复我不知道的初始类.
注意:我对"更改您的存储系统"类型的答案不感兴趣,因为它不是您感兴趣的点.请将其视为关于语言能力的学术问题.
干杯
直到今天我才真正想过这个,但在搜索网络后我并没有真正找到任何东西.也许我没有在搜索中对其进行措辞.
给定一个数组(多维或不多):
$data = array('this' => array('is' => 'the'), 'challenge' => array('for' => array('you')));
Run Code Online (Sandbox Code Playgroud)
var_dumped时:
array(2) { ["this"]=> array(1) { ["is"]=> string(3) "the" } ["challenge"]=> array(1) { ["for"]=> array(1) { [0]=> string(3) "you" } } }
Run Code Online (Sandbox Code Playgroud)
挑战在于:将数组重新编译为PHP的可用数组的最佳优化方法是什么?就像一个undump_var()功能.数据是否全部作为浏览器输出的一行,或者是否包含换行符作为输出到终端.
这只是正则表达式的问题吗?或者还有其他方式吗?我在寻找创造力.
更新:注意.我熟悉序列化和反序列化的人.我不是在寻找替代解决方案.这是一个代码挑战,看看它是否可以以优化和创造性的方式完成.所以serialize和var_export不是这里的解决方案.它们也不是最好的答案.
我有一个PHP数组,其数字键作为字符串类型.
但是当我尝试访问它们时,PHP会给我一个未定义的索引错误.
$a = (array)json_decode('{"1":1,"2":2}');
var_dump($a);
var_dump(isset($a[1]));
var_dump(isset($a["1"]));
var_dump($a[1]);
var_dump($a["1"]);
Run Code Online (Sandbox Code Playgroud)
输出:
array (size=2)
'1' => int 1
'2' => int 2
boolean false
boolean false
ERROR: E_NOTICE: Undefined offset: 1
null
ERROR: E_NOTICE: Undefined offset: 1
null
我如何访问这些值?
我正在使用亚马逊产品广告API.值作为多维对象返回.
它看起来像这样:
object(AmazonProduct_Result)#222 (5) {
["_code":protected]=>
int(200)
["_data":protected]=>
string(16538)
array(2) {
["IsValid"]=>
string(4) "True"
["Items"]=>
array(1) {
[0]=>
object(AmazonProduct_Item)#19 (1) {
["_values":protected]=>
array(11) {
["ASIN"]=>
string(10) "B005HNF01O"
["ParentASIN"]=>
string(10) "B008RKEIZ8"
["DetailPageURL"]=>
string(120) "http://www.amazon.com/Case-Logic-TBC-302-FFP-Compact/dp/B005HNF01O?SubscriptionId=AKIAJNFRQCIJLTY6LDTA&tag=*********-20"
["ItemLinks"]=>
array(7) {
[0]=>
object(AmazonProduct_ItemLink)#18 (1) {
["_values":protected]=>
array(2) {
["Description"]=>
string(17) "Technical Details"
["URL"]=>
string(217) "http://www.amazon.com/Case-Logic-TBC-302-FFP-Compact/dp/tech-data/B005HNF01O%3FSubscriptionId%3DAKIAJNFRQCIJLTY6LDTA%26tag%*******-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB005HNF01O"
}
}
[1]=>
object(AmazonProduct_ItemLink)#17 (1) {
["_values":protected]=>
array(2) {
Run Code Online (Sandbox Code Playgroud)
我的意思是它也有对象内的数组.我想将它们全部转换为多维数组.
我的数组如下:
Array
(
[0] => stdClass Object
(
[id] => 1
[name] => demo1
)
[1] => stdClass Object
(
[id] => 2
[name] => demo2
)
[2] => stdClass Object
(
[id] => 6
[name] => otherdemo
)
)
Run Code Online (Sandbox Code Playgroud)
如何将整个数组(包括对象)转换为纯多维数组?
我正在返回从ORM中提取的对象数组的json_encode().它包含许多具有空值的属性.删除这些null属性的最佳方法是什么?我想我可以迭代属性,看看它们是否为null然后取消设置()该属性,但肯定必须有更优雅的方式?
Laravel输出:
Array
(
[0] = stdClass Object
(
[ID] = 5
)
[1] = stdClass Object
(
[ID] = 4
)
)
Run Code Online (Sandbox Code Playgroud)
我想将其转换为普通数组.只是想删除它stdClass Object.我也试过使用->toArray();但是我收到了一个错误:
在非对象上调用成员函数toArray().
我怎样才能解决这个问题?
功能已在http://www.srihost.com上实施
foreach($categories as $category)
{
print_r($category);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了以下结果.
stdClass Object
(
[category_Id] => 4
[category_Title] => cat 4
)
stdClass Object
(
[category_Id] => 7
[category_Title] => cat 7
)
stdClass Object
(
[category_Id] => 6
[category_Title] => cat 6
)
Run Code Online (Sandbox Code Playgroud)
我该如何使用implode(', ' )以获得以下结果:
猫4,猫7,猫6
我用它,但是我收到了一个错误
我需要转换这个数组
Array (
[0] => stdClass Object
( [title] => primo )
[1] => stdClass Object
( [title] => secondo ))
Run Code Online (Sandbox Code Playgroud)
至
Array (
[primo] => primo
[secondo] => secondo )
Run Code Online (Sandbox Code Playgroud)
尝试了不同的选项,包括类型转换,仍然没有找到正确的解决方案
当我做这样的事情时,我正在运行PHP7.0.9:
$s = json_decode('{"1": "xxx"}');//decode json to stdClass
$a = (array)$s;//cast to array
die(var_dump($a, $a['1'], $a[1], count($a)));
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
array (size=1)
'1' => string 'xxx' (length=3) //<-- key 1 exists
null // $a['1'] yields null
null // $a[1] doesn't work either
int 1 // count shows there is 1 element in the array
Run Code Online (Sandbox Code Playgroud)
我期待这个结果:
array (size=1)
'1' => string 'xxx' (length=3)
string 'xxx' (length=3) // $a['1'] should work
null
int 1
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么我不能访问$a['1'],即使两个count和一个var_dump数组告诉我这个密钥存在?这是PHP中的错误,还是某种功能?
这就是我创建数组的方式fields:
public function index($slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy(['slug'=>$slug]);
$fields = (array) $page;
return $this->render('mypage.html.twig', ['page' => $page, 'fields' => $fields]);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
array:3 [?
"\x00App\Entity\Pages\x00id" => 3
"\x00App\Entity\Pages\x00name" => "cat"
"\x00App\Entity\Pages\x00color" => ""
]
Run Code Online (Sandbox Code Playgroud)
但我实际上需要这个结果:
array:3 [?
"id" => 3
"name" => "cat"
"color" => ""
]
Run Code Online (Sandbox Code Playgroud)
根据我所做的更改的建议:
public function index($slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$page = $this->getDoctrine()->getManager()->getRepository(Pages::class)->findOneBy(['slug'=>$slug]);
$fields = get_object_vars($page);
return $this->render('mypage.html.twig', ['page' => $page, 'fields' => $fields]);
}
Run Code Online (Sandbox Code Playgroud)
但这会输出一个空数组。