我有下面的多维数组,我想从子数组中删除最后两个元素(可能有任意数量的子数组)。
$data= Array
(
[0] => Array
(
[rowdata] => Array
(
[0] => Array
(
[DOELGROEP] => 2
[KANTOOR] => 2
[OBLIGOCATEGORIE] => 3
[] => Overall NPS
[0] => Array
(
[1] => npsorg
[3] => npsdetbe
)
)
[1] => Array
(
[DOELGROEP] => 2
[KANTOOR] => 2
[OBLIGOCATEGORIE] => 3
[] => Overall NPS
[0] => Array
(
[1] => npsorg
[3] => npsdetbe
)
)
)
[reason] => column values are not correct
)
)
期望的输出:
$data= Array
(
[0] => Array
(
[rowdata] => Array
(
[0] => Array
(
[DOELGROEP] => 2
[KANTOOR] => 2
[OBLIGOCATEGORIE] => 3
)
[1] => Array
(
[DOELGROEP] => 2
[KANTOOR] => 2
[OBLIGOCATEGORIE] => 3
)
)
[reason] => column values are not correct
)
)
我的尝试:
unset ($data[count($data)-2]);
上面的代码没有工作,即它没有删除最后两个元素。我做错了什么?
提前致谢
答案 0 :(得分:1)
unset($data[0]['rowdata'][0][0]);
答案 1 :(得分:1)
unset($data[0]['rowdata'][0]['ab'],$data[0]['rowdata'][0][0]);
答案 2 :(得分:1)
您的代码无效unset ($data[count($data)-2]);
因为count($data)-2 = -1
所以您的数组$ data没有键-1,$ data [-1]。
你需要按照你的数组示例$ data [0] ['rowdata'] [0] ['ab']。
如果您确定您将始终使用此数组“设计”。
<?php
$data = Array(
0 => Array(
'rowdata' => Array(
0 => Array
(
'DOELGROEP' => 2,
'KANTOOR' => 2,
'OBLIGOCATEGORIE' => 3,
0 => Array
(
1 => 'npsorg',
3 => 'npsdetbe'
)
),
1 => Array
(
'DOELGROEP' => 2,
'KANTOOR' => 2,
'OBLIGOCATEGORIE' => 3,
0 => Array
(
1 => 'npsorg',
3 => 'npsdetbe'
)
)
),
'reason' => 'column values are not correct'
)
);
echo '<pre>';
echo '<h1>before</h1>';
print_r($data);
foreach($data[0]['rowdata'] as $k => $v){
unset($data[0]['rowdata'][$k][0]);
}
echo '<h1>After</h1>';
print_r($data);
//unset($data[0]['rowdata'][0][0]);
// unset($data[0]['rowdata'][1][0]);
<?php
$data = Array(
0 => Array(
'rowdata' => Array(
0 => Array
(
'DOELGROEP' => 2,
'KANTOOR' => 2,
'OBLIGOCATEGORIE' => 3,
0 => Array
(
1 => 'npsorg',
3 => 'npsdetbe'
)
),
1 => Array
(
'DOELGROEP' => 2,
'KANTOOR' => 2,
'OBLIGOCATEGORIE' => 3,
0 => Array
(
1 => 'npsorg',
3 => 'npsdetbe'
)
)
),
'reason' => 'column values are not correct'
)
);
echo '<pre>';
echo '<h1>before</h1>';
print_r($data);
foreach($data[0]['rowdata'] as $k => $v){
unset($data[0]['rowdata'][$k][0]);
}
echo '<h1>After</h1>';
print_r($data);
//unset($data[0]['rowdata'][0][0]);
// unset($data[0]['rowdata'][1][0]);
更新:
你可以,
unset($data[0]['rowdata'][0][0]);
unset($data[0]['rowdata'][1][0]);
或者
unset($data[0]['rowdata'][0][0]);
unset($data[0]['rowdata'][1][0]);
更新示例:example
答案 3 :(得分:1)
尝试创建自定义过滤器功能
function myFilter($val){
foreach($val as $key=>$val){
$len = sizeof($val);
for($i=0;$i<$len;$i++){
$val[$i] = array_splice($val[$i],0,-2);
}
}
return $val;
}
然后调用array_map
$data = array_map('myFilter',$data);
print_r($data);
exit();
您可以看到更多信息here
答案 4 :(得分:1)
如您所知,您要从多维数组中删除元素,您必须达到该维度。之后,您需要拥有该阵列的所有键。您可以使用array_keys。你会得到一系列的钥匙。然后通过使用它可以取消设置数组的最后两个元素。你必须在循环中使用它。
你必须实现:
unset($data[0]['rowdata'][0]['ab']);
unset($data[0]['rowdata'][0][0]);
答案 5 :(得分:1)
您应该使用适用于非数字索引的结束函数。 这应该工作我认为:
for($i=0; $i<2; $i++){
end($data[0]['rowdata'][0]);
unset(key($data[0]['rowdata'][0]));
reset($data[0]['rowdata'][0]);
}
答案 6 :(得分:1)
@Mrcoder同样的事情,除了你应该围绕一个foreach函数包装它来解析你的所有&#34; main&#34;阵列。
$toDel = 2;
foreach($data[0]['rowdata'] as $main){
for($i=0; $i<toDel; $i++){
end($main);
unset(key($main));
reset($main);
}
}
答案 7 :(得分:1)
如果您想要保留的三个键是DOELGROEP,KANTOOR和OBLIGOCATEGORIE - 以下内容将起作用。
$keep_indexes = array('DOELGROEP', 'KANTOOR', 'OBLIGOCATEGORIE');
foreach($data[0]['rowdata'] as $key => $val) {
if(!in_array($key, $keep_indexes)) { unset($data[0]['rowdata'][$key]; }
}
编辑,如果它不是特定于密钥而且它总是最后2列,请尝试:
foreach($data[0]['rowdata'] as $key => $val) {
$i = 1;
$count = count($data[0]['rowdata'][$key]);
foreach($data[0]['rowdata'][$key] as $key2 => $val2) {
if($i >= ($count - 2)) { unset($data[0]['rowdata'][$key][$key2]); }
$i++;
}
}