PHP 多维数组空值
PHP Multidimensional Array Empty Values
我正在尝试使用 ACF(高级自定义字段)table 数据和 header 行,并创建一个 JSON object 数组,其中每个object 被标记为 header 值,列作为该值的数组...我的结果是空的,我不确定为什么。
function get_rates_table(){
$table = get_field('rates_table', 'options');
$head = [];
$rows = [];
$each = [];
if($table){
if($table['header']){
foreach ($table['header'] as $h) {
array_push($head, $h['c']);
}
}
if ($table['body']) {
foreach ($table['body'] as $tr) {
foreach ($tr as $td) {
$each[] = $td['c'];
}
$rows[] = $each;
unset($each);
}
}
foreach ($head as $key => $value) {
$value = [];
foreach($rows as $k => $v){
foreach ($v as $x => $y) {
if($x == $key){
array_push($value, $y);
}
}
}
}
}
return $head;
}
输出如下:
"rates_table": [
"Term",
"Rate Loan",
"Rate Refi"
],
原始 ACF 数组如下所示:
Array(
[header] => Array
(
[0] => Array
(
[c] => Term
)
[1] => Array
(
[c] => Rate Loan
)
[2] => Array
(
[c] => Rate Refi
)
)
[body] => Array
(
[0] => Array
(
[0] => Array
(
[c] => 12
)
[1] => Array
(
[c] => 3
)
[2] => Array
(
[c] => 3.5
)
)
[1] => Array
(
[0] => Array
(
[c] => 24
)
[1] => Array
(
[c] => 3.1
)
[2] => Array
(
[c] => 3.8
)
) etc...
有很多代码我不愿意进行故障排除,但就其中一个而言,您似乎只返回不包含任何其他值的 $head
。为了简单起见:
$header = array_column($array['header'], 'c');
foreach($array['body'] as $values) {
$result[] = array_combine($header, array_column($values, 'c'));
}
- 从数组中提取 headers
- 循环 body 并提取值
- 将 header 组合为键,将值组合为值
这将产生如下内容:
Array
(
[0] => Array
(
[Term] => 12
[Rate loan] => 3
[Rate refi] => 3.5
)
[1] => Array
(
[Term] => 24
[Rate loan] => 3.1
[Rate refi] => 3.8
)
)
使用相同的 header 可以不同地构造数组:
foreach($header as $k => $h) {
$result[$h] = array_column(array_column($array['body'], $k), 'c');
}
- 循环 headers 暴露数字键
- 使用 header 值作为键并使用 header 键提取值
这将产生如下内容:
Array
(
[Term] => Array
(
[0] => 12
[1] => 24
)
[Rate loan] => Array
(
[0] => 3
[1] => 3.1
)
[Rate refi] => Array
(
[0] => 3.5
[1] => 3.8
)
)
我正在尝试使用 ACF(高级自定义字段)table 数据和 header 行,并创建一个 JSON object 数组,其中每个object 被标记为 header 值,列作为该值的数组...我的结果是空的,我不确定为什么。
function get_rates_table(){
$table = get_field('rates_table', 'options');
$head = [];
$rows = [];
$each = [];
if($table){
if($table['header']){
foreach ($table['header'] as $h) {
array_push($head, $h['c']);
}
}
if ($table['body']) {
foreach ($table['body'] as $tr) {
foreach ($tr as $td) {
$each[] = $td['c'];
}
$rows[] = $each;
unset($each);
}
}
foreach ($head as $key => $value) {
$value = [];
foreach($rows as $k => $v){
foreach ($v as $x => $y) {
if($x == $key){
array_push($value, $y);
}
}
}
}
}
return $head;
}
输出如下:
"rates_table": [
"Term",
"Rate Loan",
"Rate Refi"
],
原始 ACF 数组如下所示:
Array(
[header] => Array
(
[0] => Array
(
[c] => Term
)
[1] => Array
(
[c] => Rate Loan
)
[2] => Array
(
[c] => Rate Refi
)
)
[body] => Array
(
[0] => Array
(
[0] => Array
(
[c] => 12
)
[1] => Array
(
[c] => 3
)
[2] => Array
(
[c] => 3.5
)
)
[1] => Array
(
[0] => Array
(
[c] => 24
)
[1] => Array
(
[c] => 3.1
)
[2] => Array
(
[c] => 3.8
)
) etc...
有很多代码我不愿意进行故障排除,但就其中一个而言,您似乎只返回不包含任何其他值的 $head
。为了简单起见:
$header = array_column($array['header'], 'c');
foreach($array['body'] as $values) {
$result[] = array_combine($header, array_column($values, 'c'));
}
- 从数组中提取 headers
- 循环 body 并提取值
- 将 header 组合为键,将值组合为值
这将产生如下内容:
Array
(
[0] => Array
(
[Term] => 12
[Rate loan] => 3
[Rate refi] => 3.5
)
[1] => Array
(
[Term] => 24
[Rate loan] => 3.1
[Rate refi] => 3.8
)
)
使用相同的 header 可以不同地构造数组:
foreach($header as $k => $h) {
$result[$h] = array_column(array_column($array['body'], $k), 'c');
}
- 循环 headers 暴露数字键
- 使用 header 值作为键并使用 header 键提取值
这将产生如下内容:
Array
(
[Term] => Array
(
[0] => 12
[1] => 24
)
[Rate loan] => Array
(
[0] => 3
[1] => 3.1
)
[Rate refi] => Array
(
[0] => 3.5
[1] => 3.8
)
)