0

[1]で始まるすべてのアイテムの配列内の完全なレベルを削除しようとしています

私は配列でまったく運がありません。私にはちょっと新しい。そして、私が見つけたすべてのものを読むことは明確ではなく、私のような例でもありません。

これまでのところ、私のコードはここにあります。送信を削除できます。しかし、私はそれ以上先に進むことができず、アイテム[1] - 通常のシーザーサラダとして見出し、特別、アイテムなどでそれらすべてを削除する方法がわかりません

あなたが提供できるどんな助けにも感謝します

code
<?php
    // version:
$testarray =    
Array(
        "heading" => Array
        (
            "0" => 'Salads',
            "1" => 'Salads',
            "2" => 'Pasta',
        ),

        "special" => Array
        (
            "0" => '',
            "1" => '',
            "2" => '',
        ),

        "item" => Array
        (
            "0" => 'Small Green',
            "1" => 'Regular Caesar',
            "2" => 'Baked Lasagna',
        ),

        "description" => Array
        (
            "0" => 'Grape tomatoes, onions, green peppers and cucumbers on the bed of crisp lettuce.',
            "1" => 'Classic recipe with romaine lettuce and croutons',
            "2" => 'With meat sauce, tomato vegetarian sauce or Alfredo sauce',
        ),

        "price" => Array
        (
            "0" => 'See Desc',
            "1" => '$5.99',
            "2" => '$9.69',
        ),

        "notes" => Array
        (
            "0" => 'Available in Small ($2.99), Regular ($5.99)',
            "1" => '',
            "2" => '',
        ),

        "submit_val" => 'Submit'
    );


echo "testarray";
echo "<pre>";
print_r($testarray);
echo "</pre>";  
echo "<hr>";

$removed_data=removeItem($testarray,'Submit');

echo "removed_data";
echo "<pre>";
print_r($removed_data);
echo "</pre>";  

echo "<hr>";
die();

// works for submit
function removeItem($look_in_Array, $remove){
    foreach($look_in_Array as $key => $value) {
        echo $key . ' = ' . $value . '<br>'; 
    if ($value ==$remove) {
            echo 'found '.$remove."<br>";
            unset($look_in_Array[$key]);
    }
    }
     return $look_in_Array;
}
?>

必要な出力?:

sample of desired output
$testarray =    
Array(
        "heading" => Array
        (
            "0" => 'Salads',
            "1" => 'Pasta',
        ),

        "special" => Array
        (
            "0" => '',
            "1" => '',
        ),

        "item" => Array
        (
            "0" => 'Small Green',
            "1" => 'Baked Lasagna',
        ),

        "description" => Array
        (
            "0" => 'Grape tomatoes, onions, green peppers and cucumbers on the bed of crisp lettuce.',
            "1" => 'With meat sauce, tomato vegetarian sauce or Alfredo sauce',
        ),

        "price" => Array
        (
            "0" => 'See Desc',
            "1" => '$9.69',
        ),

        "notes" => Array
        (
            "0" => 'Available in Small ($2.99), Regular ($5.99)',
            "1" => '',
        ),

        "submit_val" => 'Submit'
    );
4

3 に答える 3

1

あなたの質問を正しく理解できれば、配列キーを削除しようとしています [1]。とにかくこれを関数として実行している場合は、unset を使用するか、新しい配列を宣言して返すことができます。unset() を使用することはあなたが探しているものかもしれませんが、ローカル変数を渡すだけなので、関数では時間の無駄です。代わりに、値を新しい配列に渡したい場合があります。これはキー値を保持することに注意してください。

function removeItemsRecursive($array,$searchKey) {
 /*
 ** Finds any key value that equals $searchKey
 ** in a multi-level array and does not pass anything
 ** equal to $searchKey.
 */
     foreach($array AS $key=>$value) {  //go through each array and assign [key] => value to $key and $value, respectively
        if($key !== $searchKey) //if a key is not equal to the $searchKey (aka 1 for example) then assign something to $newArray
        { 
            if(is_array($value)) //if the value inside of the array is another array (for multilevel arrays)
            {
                $newArray[$key] = removeItemsRecursive($value,$searchKey);  //loop through the function and do this for the next level down.
            }
            else //if the value inside of the array is scalar
            {
                $newArray[] = $array[$key]; //the new array is assigned the current value where the array key is not equal to $searchKey.
            }
        }

     }
     return $newArray;
}

これは基本的に $array の各値を調べ、$key が $searchKey でない場合、その値を $newArray に渡します。別名 removeItemsRecursive($array,1); キーが 1 で、値のない新しい配列を返します。

関数の呼び出し

関数を呼び出すには、次を追加するだけです。

$array = removeItemsRecursive($testarray,1);

この新しい配列を見ると、探している結果が表示されます。

echo "<PRE>";
print_r($array);
echo "</PRE>";
//returns the array you're looking for.
于 2013-08-11T21:57:00.763 に答える
0
function removeLevel($a, $l) {      // $a = entire array, $l = level to remove
    $removed = array();
    foreach ($a as $inner) {        // iterate through the outer array
        array_splice($inner,$l,1);  // remove the "$l"th element of the $inner array
    }
    return $a;                      // return new array with level removed
}

$arrBetter = removeLevel($testarray, 2)そのレベルのデータが削除された配列を返します!

于 2013-08-11T21:55:23.973 に答える
0

http://php.net/manual/en/function.unset.php

php で unset 関数を使用します。あなたの場合、配列を反復処理して、位置 1 のすべての要素を削除することができます。

于 2013-08-11T22:06:31.397 に答える