0

この配列をフィルタリングしてインデックスを再作成しようとしています。私の元の配列は$_SESSION['ShowingRequests']です。
私はもう試した

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

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

ただし、アレイの2番目のレベルには到達しません。これから行きたい

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 に答える