我正在尝试过滤并重新索引此数组。我原来的数组是$ _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
)
)
答案 0 :(得分: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_values和array_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']));
答案 1 :(得分: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
用于删除别名,所以不应在下一次迭代中或迭代完成后重复使用它。