Php 从多维数组展平\u数组函数-未定义
我试图将多维数组简化为简单数组。我试着搜索答案,并使用了我在这里找到的一些函数。但我一直坚持在将数组展平后在foreach循环中添加变量: 这是我的功能: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
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);