PHP在循环中添加缺少的键
我有以下数组PHP在循环中添加缺少的键,php,arrays,Php,Arrays,我有以下数组 [rows] => Array ( [0] => Array ( [id] => 2704783858001796 [rowNumber] => 1 [expanded] => 1
[rows] => Array
(
[0] => Array
(
[id] => 2704783858001796
[rowNumber] => 1
[expanded] => 1
[createdAt] => 2020-02-18T18:42:54Z
[modifiedAt] => 2020-02-18T22:07:36Z
[cells] => Array
(
[0] => Array
(
[columnId] => 1676391784703876
[value] => Approved
[displayValue] => Approved
)
[1] => Array
(
[columnId] => 1225963934640004
[value] => Submitted
[displayValue] => Submitted
)
[2] => Array
(
[columnId] => 4979307467564932
[value] => 2020-02-18
)
[3] => Array
(
[columnId] => 3203730339325828
其中,[value]和[displayValue]并不总是显示。当我在数组中循环时,我需要能够将[value]插入为空或0。我不能让循环跳过键
$j = count($dataID['rows']);
for ($i = 0; $i < $j; $i++) {
array_push($dataRows, array_column($dataID['rows'][$i]['cells'], 'value'));
}
$j=count($dataID['rows']);
对于($i=0;$i<$j;$i++){
array_push($dataRows,array_column($dataID['rows'][$i]['cells'],'value'));
}
欢迎来到stackoverflow:-)
在这种情况下,如果列不存在,array\u列
将跳过。我想添加一个用户函数,您可以在其中控制默认值并使用array\u map
您的自定义功能:
function array_column_with_default(array $array, string $key, $default = null)
{
return array_map(function ($item) use ($key, $default) {
if (false === array_key_exists($key, $item)) {
return $default;
}
return $item[$key];
}, $array);
}
下面是使用array\u map()
而不是array\u column
的代码示例:
$j = count($dataID['rows']);
for ($i = 0; $i < $j; $i++) {
array_push($dataRows, array_column_with_default($rows[$i]['cells'], 'value', ''));
}
将输出以下内容
array(2) {
[0] =>
array(3) {
[0] =>
string(8) "Approved"
[1] =>
string(9) "Submitted"
[2] =>
string(10) "2020-02-18"
}
[1] =>
array(3) {
[0] =>
string(12) "Not Approved"
[1] =>
string(13) "Not Submitted"
[2] =>
string(0) ""
}
}
欢迎来到stackoverflow:-) 在这种情况下,如果列不存在,
array\u列
将跳过。我想添加一个用户函数,您可以在其中控制默认值并使用array\u map
您的自定义功能:
function array_column_with_default(array $array, string $key, $default = null)
{
return array_map(function ($item) use ($key, $default) {
if (false === array_key_exists($key, $item)) {
return $default;
}
return $item[$key];
}, $array);
}
下面是使用array\u map()
而不是array\u column
的代码示例:
$j = count($dataID['rows']);
for ($i = 0; $i < $j; $i++) {
array_push($dataRows, array_column_with_default($rows[$i]['cells'], 'value', ''));
}
将输出以下内容
array(2) {
[0] =>
array(3) {
[0] =>
string(8) "Approved"
[1] =>
string(9) "Submitted"
[2] =>
string(10) "2020-02-18"
}
[1] =>
array(3) {
[0] =>
string(12) "Not Approved"
[1] =>
string(13) "Not Submitted"
[2] =>
string(0) ""
}
}
此代码循环通过
$dataID['row']
的每个元素,并在$row['cells']
的每个元素中循环,以添加两个键(如果它们不存在):
foreach( $dataID['rows'] as &$row ) {
foreach( $row['cells'] as &$cell ) {
if( !array_key_exists( 'value', $cell ) ) {
$cell['value'] = null;
}
if( !array_key_exists( 'displayValue', $cell ) ) {
$cell['displayValue'] = null;
}
}
}
因此,此数组(您的简短版本)
:
变成:
Array
(
[rows] => Array
(
[0] => Array
(
[cells] => Array
(
[0] => Array
(
[value] =>
[displayValue] =>
)
[1] => Array
(
[value] =>
[displayValue] =>
)
)
)
)
)
此代码循环通过
$dataID['row']
的每个元素,并在$row['cells']
的每个元素中循环,以添加两个键(如果它们不存在):
foreach( $dataID['rows'] as &$row ) {
foreach( $row['cells'] as &$cell ) {
if( !array_key_exists( 'value', $cell ) ) {
$cell['value'] = null;
}
if( !array_key_exists( 'displayValue', $cell ) ) {
$cell['displayValue'] = null;
}
}
}
因此,此数组(您的简短版本)
:
变成:
Array
(
[rows] => Array
(
[0] => Array
(
[cells] => Array
(
[0] => Array
(
[value] =>
[displayValue] =>
)
[1] => Array
(
[value] =>
[displayValue] =>
)
)
)
)
)
“所以这不是一个代码编写服务”,但我要说的是:我从不建议在浏览数据结构时尝试修改它。取而代之的是“浏览一遍,建立一些你需要做的更改的列表。”然后,在浏览完成后,返回并应用这些更改
或者,每次进行更改时,都要重新启动walk。“因此不是代码编写服务”,但我要说的是:我从不建议在遍历数据结构时尝试修改它。取而代之的是“浏览一遍,建立一些你需要做的更改的列表。”然后,在浏览完成后,返回并应用这些更改
或者,每次进行更改时,都要重新开始行走。不知道您想要在这里使用
数组_push
做什么,也不知道$dataRows
应该是什么。这里需要第二个循环,检查每行项目中的所有单元格
,然后插入该级别上的属性(如果缺少)。不知道您想要在这里推送数组什么,或者$dataRows
应该是什么。这里需要第二个循环,检查每一行项目中的所有单元格
,然后插入该级别上缺少的属性。