>我有一个三维数组,我试图删除数组的基本键,以便只显示 2 个较高的键/值对。
同时,我正在尝试删除 2 个字段,但代码:unset($TestArray['总计']);unset($TestArray['Count_all']);没有奏效。
曲 1)如何从数组中删除字段"总计"和"Count_all"?
曲二)如何将图 1 中的数组简化为图 2 中的数组?(最好使数组在新的基本级别上数字化,而不是关联)。图 2 正是我试图让原始数组看起来像的样子。
对不起,如果我的措辞不能很好地描述我想要做的事情。
图1
Array
(
[86] => Array
(
[134] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 36.00
)
[130] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 28.00
)
[135] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 125.00
)
[131] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 67.00
)
[133] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 368.80
)
[Total] => 624.8
[Count_all] => 5
)
[67] => Array
(
[130] => Array
(
[User_ID] => 8
[Item_ID] => 67
[Total_Amount] => 129.58
)
[131] => Array
(
[User_ID] => 8
[Item_ID] => 67
[Total_Amount] => 230.25
)
[133] => Array
(
[User_ID] => 8
[Item_ID] => 67
[Total_Amount] => 76.20
)
[132] => Array
(
[User_ID] => 8
[Item_ID] => 67
[Total_Amount] => 436.03
)
[Total] => 872.06
[Count_all] => 4
)
[87] => Array
(
[132] => Array
(
[User_ID] => 8
[Item_ID] => 87
[Total_Amount] => 106.5
图2
Array
(
[0] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 36.00
)
[1] => Array
(
[User_ID] => 8
[[Item_ID] => 86
[Total_Amount] => 28.00
)
[2] => Array
等。
只需遍历数组:)
<?php
$array_input;
$array_output = array();
$blackListKeys = array("Total", "Count_all");
foreach ($array_input as $array_input1) {
foreach ($array_input1 as $key => $value) {
if (in_array($key, $blackListKeys)) continue;
else $array_output[] = $value;
}
}
您的unset($TestArray['Total'])
代码不起作用,因为"Total"键(以及另一部分的Count_all键)位于数组中。 使用示例,您有:
Array
(
[86] => Array
(
[134] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 36.00
)
[130] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 28.00
)
[135] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 125.00
)
[131] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 67.00
)
[133] => Array
(
[User_ID] => 8
[Item_ID] => 86
[Total_Amount] => 368.80
)
[Total] => 624.8
[Count_all] => 5
)
);
您需要的数组键(假设数组是$TestArray
将unset($TestArray[86]['Total'];
.
对于问题的第二部分,您需要循环访问第一个数组并从值构建一个新数组。 同样,假设您的第一个数组示例是$TestArray
您可以执行以下操作
$newArray = array(); // this will be the array in the correct format
foreach ($TestArray as $key => $value) {
if (is_array($value)) {
$newArray[] = $value;
}
}
这也具有删除 Total 和 Count_all 索引的优点,因为它们不是数组
所有值得做的事情都值得过度做;-)
在 PHP7 中(因为匿名类),你可以执行以下操作:
<?php
$src = array(
86 => array(
134 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'36.00'),
130 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'28.00'),
135 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'125.00'),
131 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'67.00'),
133 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'368.00'),
'Total' => '624.8',
'Count_all' => 5
),
67 => array(
134 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'129.58'),
130 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'230.25'),
135 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'76.20'),
131 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'436.03'),
'Total' => '872.06',
'Count_all' => 4
)
);
$iter = array_reduce(
$src,
function($it, $e) {
$it->append(
new class(new ArrayIterator($e)) extends FilterIterator {
public function accept() {
return !in_array($this->key(), array('Total', 'Count_all'));
}
}
);
return $it;
},
new AppendIterator
);
foreach($iter as $v) {
echo join(', ', $v), "'r'n";
}
指纹
8, 86, 36.00
8, 86, 28.00
8, 86, 125.00
8, 86, 67.00
8, 86, 368.00
8, 67, 129.58
8, 67, 230.25
8, 67, 76.20
8, 67, 436.03
另请参阅:
http://docs.php.net/splhttp://docs.php.net/array_reduce