2012-02-10 28 views
1

我有与性病对象之前给出以及重新安排多维数组性病类对象

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

请显示你已经尝试过... – DaveRandom 2012-02-10 11:36:54

+0

@DaveRandom请看我的编辑。 – Astha 2012-02-10 11:43:14

+0

你遇到的这个问题是因为这些值是受保护的,并且你没有在可访问的上下文中这样做。 'abc_Charge'是否扩展了'abc_Object'或反之呢? – DaveRandom 2012-02-10 11:50:42

回答

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(反之亦然),将有可能在包装这单个类可以扩展子对象,但它仍然不是一个漂亮的解决方案 - 拥有比我更好的面向对象的人可能会有更好的想法。

作为一个方面说明,您应该在开发时在脚本的顶部有error_reporting(E_ALL); ini_set('display_errors', 1);。如果你有,你会看到许多错误消息与你上面的代码示例给你一个线索是什么问题。

+0

非常感谢。是的,有类,他们有反之亦然的方法。我花时间了解你想告诉我什么。但是,现在我完成了再次感谢。实现此功能的非常美丽的方式。 – Astha 2012-02-10 12:45:28