Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多维数组展平\u数组函数-未定义_Php_Arrays - Fatal编程技术网

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

Php 从多维数组展平\u数组函数-未定义,php,arrays,Php,Arrays,我试图将多维数组简化为简单数组。我试着搜索答案,并使用了我在这里找到的一些函数。但我一直坚持在将数组展平后在foreach循环中添加变量: 这是我的功能: public function create_order_direct($order_data) { $result = MarathonUtil::flatten_array($order_data); foreach ($result as $data) { $media_id = $data['media

我试图将多维数组简化为简单数组。我试着搜索答案,并使用了我在这里找到的一些函数。但我一直坚持在将数组展平后在foreach循环中添加变量:

这是我的功能:

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'];
    }
}
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;
}
[{
    "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
        }
    }
}]
MarathonUtil::flatten\u数组
是这样的:

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'];
    }
}
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;
}
[{
    "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$media\u id
时,它会显示
undefined
。当我
返回$result
时,所有数据都可用,但不在foreach内部?我只获取数据
$price\u code
$gross
(它们是数组中最深的,请参见下)

阵列在平坦化之前看起来是这样的:

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'];
    }
}
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;
}
[{
    "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\u id']
在foreach内部不起作用,或者
print\r($result)
只给我
price\u code
gross

如果你真的想要单个变量,你可以在
$out
上使用extract。但我不建议这样做,只需通过键访问值即可。上面的代码与PHP7.1上给出的结果一起工作。如果已经有一个数组,那么可能不需要json_解码步骤。我假设输入为JSON,正如您所说的“数组在变平之前看起来是这样的:”“可能与我的链接中的一个答案重复,但其他许多答案都有点冗长。
<?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);