在 php 数组中拖放一个图层并删除字段


Drop a layer in php array and drop fields also

>我有一个三维数组,我试图删除数组的基本键,以便只显示 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
        )
);

您需要的数组键(假设数组是$TestArrayunset($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