0

多次元配列のサブ配列の特定の要素が値と等しくないことを確認し、マルチ配列からその値で配列を設定解除しています。これを簡単に実装できるように関数を作成しましたが、機能していないようです。

function multi_unset($array, $unset) {
    foreach($array as $key=>$value) {
        $arrayU = $array[$key];
        $check = array();
        for($i = 0; $i < count($unset); $i++) { // produces $array[$key][0, 2, 3]
            array_push($check, $arrayU[$unset[$i]]);
        }
        if(in_array("-", $check)) {
            unset($array[$key]);
        }
    }
    return $array;
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3); // keys in individual arrays to check
multi_unset($arr, $unset);
print_r($arr); // Should output without $arr[0]

この場合、各サブ配列に「-」値が含まれているかどうかを確認し、マルチ配列から配列の設定を解除しています。サブ配列(0、2、3)の特定のキーのみをチェックしていますが、変更なしで配列を出力します。スコーピングが間違っているに違いないと考え、可能な限り「グローバル」を使用しようとしましたが、それは修正されていないようでした。

4

2 に答える 2

0

PHPでの参照による受け渡しと値による受け渡しについて、ある程度読みたいと思うかもしれません。与えられたデータセットで動作するいくつかのコードがあります...

// Note the pass by reference.
function multi_unset(&$array, $unset) {
    foreach($array as $pos => $subArray) {
        foreach($unset as $index) {
            $found = ("-" == $subArray[$index]);
            if($found){
                unset($subArray[$index]);
                            // Ver 2: remove sub array from main array; comment out previous line, and uncomment next line.
                            // unset($array[$pos]);
            }
            $array[$pos] = $subArray;  // Ver 2: Comment this line out
        }
    }
    //return $array; // No need to return since the array will be changed since we accepted a reference to it.
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3);
multi_unset($arr, $unset);
print_r($arr);
于 2012-09-02T04:14:29.053 に答える
0

バージョンを少し変更し、戻り値を処理しました。

function multi_unset($array, $unset)
{
    $retVal = array();
    foreach($array as $key => $value)
    {
        $remove = false;
        foreach($unset as $checkKey)
        {
            if ($value[$checkKey] == "-")
                $remove = true;
        }
        if (!$remove)
            $retVal[] = $value;
    }
    return $retVal;
}

$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3);
$arr = multi_unset($arr, $unset);
print_r($arr);
于 2012-09-02T04:21:12.270 に答える