我正在使用std对象之前给出的多维数组
Array
(
[0] => abc_Object Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[count] => 2
[data] => Array
(
[0] => abc_Charge Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[id] => dGoEw
[ine] => fKYF0a
[xyz] => abc_Object Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[id] => uUmuym
[last] => 4242
)
)
)
)
[1] => abc_Charge Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[id] => dblvEw
[ine] => fKyyu0a
[xyz] => abc_Object Object
(
[_api:protected] => z7jj
[_values:protected] => Array
(
[id] => urtuym
[last] => 4242
)
)
)
)
)
)
)
[1] => abc_Object Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[count] => 2
[data] => Array
(
[0] => abc_Charge Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[id] => dGoEw
[ine] => fKYF0a
[xyz] => abc_Object Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[id] => uUmuym
[last] => 4242
)
)
)
)
[1] => abc_Charge Object
(
[_api:protected] => zvbj
[_values:protected] => Array
(
[id] => dblvEw
[ine] => fKyyu0a
[xyz] => abc_Object Object
(
[_api:protected] => z7jj
[_values:protected] => Array
(
[id] => urtuym
[last] => 4242
)
)
)
)
)
)
)
)
我正在尝试将所有这些组合成一个更简单的数组
Array(
[0]=>(
[id] => dGoEw
[ine] => fKYF0a
[cid] => uUmuym
)
[1]=>(
[id] => dblvEw
[ine] => fKyyu0a
[cid] => urtuym
)
[2]=>(
[id] => dGoEw
[ine] => fKYF0a
[cid] => uUmuym
)
[3]=>(
[id] => dblvEw
[ine] => fKyyu0a
[cid] => urtuym
)
)
我已经尝试了很多foreach循环和东西,但我甚至无法打印数组的第一个值。我不知道我错过了什么。
echo $arr['_api:protected'];
修改
foreach($arr as $key=>$val)
{
echo $val['_api:protected'];
print_r($val['_values:protected']);
}
这甚至没有输出
foreach($arr as $key=>$val)
{
$aaa = $val['_values:protected']['data'];
$arr111['id'] = $aaa['_values:protected']['invoice'];
$arr111['ine'] = $aaa['_values:protected']['id'];
$arr111['cid'] = $aaa['_values:protected']['xyz']['_values:protected']['id'];
$arr222[] = $arr111;
}
print_r($arr222);
也没有给我任何输出。谁能告诉我我错过了什么?
答案 0 :(得分:3)
由于您尝试访问的属性定义为protected
,因此除非您位于对象类的上下文中,否则无法访问它们,或者扩展对象类的类。您在密钥末尾看到的:protected
不是名称的一部分,它告诉您该属性被定义为protected
。因此,密钥的名称不是_values:protected
,而是_values
,其可见性设置为protected
。
这是一个有点可怕的解决方案,它有两个类,可以让你从有效的上下文中获取数据:
<?php
class simplifier_Object extends abc_Object {
public static function getIdFromObj ($obj) {
return $obj->_values['id'];
}
public static function getDataFromObj ($obj) {
return $obj->_values['data'];
}
}
class simplifier_Charge extends abc_Charge {
public static function getIdFromObj ($obj) {
return $obj->_values['id'];
}
public static function getIneFromObj ($obj) {
return $obj->_values['ine'];
}
public static function getXyzFromObj ($obj) {
return $obj->_values['xyz'];
}
}
// Assuming that your input array is held in $arr
$result = array();
foreach ($arr as $item) {
foreach (simplifier_Object::getDataFromObj($item) as $sub) {
$xyz = simplifier_Charge::getXyzFromObj($sub);
$result[] = array (
'id' => simplifier_Charge::getIdFromObj($sub),
'ine' => simplifier_Charge::getIneFromObj($sub),
'cid' => simplifier_Object::getIdFromObj($xyz)
);
}
}
var_dump($result);
如果abc_Object
扩展abc_Charge
或反之亦然,那么可以将它包装在扩展子对象的单个类中,但它仍然不是一个漂亮的解决方案 - 有人用比我更好的OO头可能有更好的主意。
作为旁注,在开发过程中,您应该在脚本的顶部放置error_reporting(E_ALL); ini_set('display_errors', 1);
。如果你有,你会看到上面的代码示例中的许多错误消息,以便为您提供问题所在的线索。