0

我正在尝试过滤和重新索引这个数组。我的原始数组是 $_SESSION['ShowingRequests']。
我试过了

array_values(array_filter($_SESSION['ShowingRequests']))

array_values(array_filter($_SESSION['ShowingRequests']['ListingKey']))
array_values(array_filter($_SESSION['ShowingRequests']['Key']))

但它不会到达数组的第二级。我希望它从此开始

Array
(
    [ListingKey] => Array
        (
            [1] => 97826889139
            [2] => 97820967049
            [4] => 97825243774
            [5] => 97824864611
        )
    [Key] => Array
        (
            [1] => 2
            [2] => 3
            [4] => 5
            [5] => 6
        )
)

对此

Array
(
    [ListingKey] => Array
        (
            [0] => 97826889139
            [1] => 97820967049
            [2] => 97825243774
            [3] => 97824864611
        )
    [Key] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 5
            [3] => 6
        )
)
4

2 回答 2

2

PHP 数组没有索引,因为它们不是真正的数组。它们实际上是有序的哈希图,因此您不应该真正关心这里的键。遍历这些数组很简单,根本不需要使用array_values

foreach ($_SESSION['ShowingRequests']['ListingKey'] as $key => $value) {
    echo "$key => $value\n";
}

会给你...

        1 => 97826889139
        2 => 97820967049
        4 => 97825243774
        5 => 97824864611

使用foreach构造获取数组中每个元素的键名和值。

在任何情况下,您都必须记住,array_valuesarray_filter都是非破坏性函数。他们返回一个新数组。它们不会通过引用来修改数组。因此,如果要修改现有数组,则必须分配返回值。它们也不递归地工作。

$_SESSION['ShowingRequests']['ListingKey'] = array_values(array_filter($_SESSION['ShowingRequests']['ListingKey']));
$_SESSION['ShowingRequests']['Key'] = array_values(array_filter($_SESSION['ShowingRequests']['Key']));
$_SESSION['ShowingRequests'] = array_values(array_filter($_SESSION['ShowingRequests']));
于 2013-01-07T22:38:47.307 回答
0

您的问题是将过滤后的值分配回同一个键吗?

foreach (['ListingKey', 'Key'] as $key) 
{
    $_SESSION['ShowingRequests'][$key] = array_values(
        array_filter($_SESSION['ShowingRequests'][$key])
    );
}

这里有一些演示它是如何与辅助函数一起工作的,只是为了让它更明显

function array_filter_values($var) {
    return array_values(array_filter($var));
}

foreach (['ListingKey', 'Key'] as $key) 
{
    $_SESSION['ShowingRequests'][$key] = 
        array_filter_values($_SESSION['ShowingRequests'][$key])
    ;
}

这是一个没有该辅助函数但有一个别名的示例,我认为它可能会使它更容易理解,但显然不是:

foreach (['ListingKey', 'Key'] as $key) 
{
    $var = &$_SESSION['ShowingRequests'][$key];
    $var = array_values(array_filter($var));
    unset($var);
}

此示例代码使用您要更改的变量的别名(这里是您要更改的数组部分)。这可能使它更容易看到它是如何工作的。因为它是一个别名,unset是用来去除别名的,它不应该在下一次迭代或迭代完成后重新使用。

于 2013-01-07T22:34:09.010 回答