代码之家  ›  专栏  ›  技术社区  ›  Asim

从多维数组展平数组函数-未定义

  •  0
  • Asim  · 技术社区  · 7 年前

    这是我的职责:

    public function create_order_direct($order_data) {
        $result = MarathonUtil::flatten_array($order_data);
        foreach ($result as $data) {
            $media_id = $data['media_id'];
            $headline = $data['headline'];
            $client_contact = $data['client_contact'];
            $plan_number = $data['plan_number'];
            $insertion_date = $data['insertion_date']; //NOW();?
            $start_date = $data['insertion_start_date'];
            $end_date = $data['insertion_end_date'];
            $PO_number = $data['PO_number'];
            $price_code = $data['price_code'];
            $gross = $data['gross'];
        }
    }
    

    MarathonUtil::flatten_array

    static function flatten_array($array) {
        $prefix = '';
        $result = array();
        foreach($array as $key=>$value) {
            if(is_array($value)) {
                $result = $result + self::flatten_array($value, $prefix . $key . '.');
            }
            else {
                $result[$prefix . $key] = $value;
            }
        }
        return $result;
    }
    

    所以在运行示例时 echo $media_id 上面说 undefined . 当我 return $result ,所有数据都可用,但不在foreach中?我只得到数据 $price_code $gross (这些是数组中最深的,见下)

    [{
        "media_id": "FACE",
        "headline": "FACEBOOK FEBRUAR 2018",
        "agreement_id": "REDP",
        "client_contact": "Asim Tariq",
        "order_id": 4710,
        "plan_number": 407,
        "insertion": {
            "insertion_date": "2018-09-25",
            "start_date": "2018-09-25",
            "end_date": "2018-10-10",
            "PO_number": 150,
            "price_row": {
                "price_code": "000",
                "gross": 10002345
            }
        }
    }]
    

    这么简单 echo $data['media_id'] 不会在foreach内部工作 print_r($result) price_code gross

    1 回复  |  直到 7 年前
        1
  •  1
  •   Progrock    7 年前
    <?php
    $json=<<<JSON
    [{
        "media_id": "FACE",
        "headline": "FACEBOOK FEBRUAR 2018",
        "agreement_id": "REDP",
        "client_contact": "Asim Tariq",
        "order_id": 4710,
        "plan_number": 407,
        "insertion": {
            "insertion_date": "2018-09-25",
            "start_date": "2018-09-25",
            "end_date": "2018-10-10",
            "PO_number": 150,
            "price_row": {
                "price_code": "000",
                "gross": 10002345
            }
        }
    }]
    JSON;
    
    $out = [];
    $data = json_decode($json, TRUE);
    array_walk_recursive($data, function($v, $k) use (&$out) {
        $out[$k] = $v;
    });
    var_export($out);
    

    输出:

    array (
        'media_id' => 'FACE',
        'headline' => 'FACEBOOK FEBRUAR 2018',
        'agreement_id' => 'REDP',
        'client_contact' => 'Asim Tariq',
        'order_id' => 4710,
        'plan_number' => 407,
        'insertion_date' => '2018-09-25',
        'start_date' => '2018-09-25',
        'end_date' => '2018-10-10',
        'PO_number' => 150,
        'price_code' => '000',
        'gross' => 10002345,
      )
    
    推荐文章