質問

があり、方法などについては削除した要素の配列からPHPを利用したような foreach ($array) なくなるものを含む要素かどうかが判別されます。

この設定で null いるのだそうしたら動かなかったのですが。

役に立ちましたか?

解決

一部が他よりもいくつかの特定のタスクのために、より便利です配列要素を削除するにはいくつかの方法があります。

削除つのアレイ要素

あなたが使用することができるただ一つの配列要素を削除したい場合は \unset() または代替的に \array_splice()

また、あなたが \array_search() のキーを取得する。

\unset() の方法

あなたは\unset()配列のキーを使用する場合/ REINDEXを変更しないことに注意してください。あなたがキーのインデックスを再作成したい場合は、意志\array_values() \unset() を使用することができますすべてのキーは0から始まる数値列挙キーに変換します。

コード

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \unset($array[1]);
                //↑ Key which you want to delete

?>

出力

[
    [0] => a
    [2] => c
]

\array_splice() の方法

あなたは\array_splice()を使用している場合、キーは自動的にインデックスを再作成されますが、対照的に、連想キーは数字キーにすべてのキーを変換するどの\array_values()に変わりはありません。

また\array_splice()はオフセットではなく、キーを必要としています! 2番目のパラメータとして

コード

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \array_splice($array, 1, 1);
                        //↑ Offset which you want to delete

?>

出力

[
    [0] => a
    [1] => c
]

を参照することにより、配列を取り、これはあなたが戻って配列にこれらの関数の戻り値を代入する必要はありません意味array_splice()と同じ\unset()ます。

複数の配列要素を削除

あなたは、複数の配列要素を削除したいと\unset()を呼び出すか、あなたが値または削除する要素のキーを知っていれば依存関数\array_splice()または\array_diff()を使用することができ、複数回\array_diff_key()したくない場合。

\array_diff() の方法

あなたが削除したい配列要素の値を知っている場合は、

、あなたは\array_diff()を使用することができます。 \unset()と以前のように、それは変更されません/配列のキーREINDEXます。

コード

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff($array, ["a", "c"]);
                               //└────────┘→ Array values which you want to delete

?>

出力

[
    [1] => b
]

\array_diff_key() の方法

あなたが削除する要素のキーを知っている場合は、

、あなたは\array_diff_key()を使用します。ここではあなたが二番目のパラメータではなく値としてキーなどのキーを渡すことを確認する必要があります。それ以外の場合は、 \array_flip() の持つ配列を反転する必要があります。そしてまた、ここでの鍵は/ REINDEXを変更することはありません。

コード

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                    //↑           ↑ Array keys which you want to delete
?>

出力

[
    [1] => b
]

あなたが同じ値を持つ複数の要素を削除する\unset()または\array_splice()を使用したい場合にも使用することができます<のhref =「http://php.net/manual/en/function.array-keys.php」のrel = 「noreferrer」> \array_keys() のは、特定の値のためにすべてのキーを取得し、すべての要素を削除します。

他のヒント

この unset() 続指数の手つかず、だが文字列の数を配列としてのハッシュテーブルができるという事実に驚きを扱う整数の物価連動アレイ:

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

なので array_splice() 使用できる場合は以下のように正常に整数鍵となります。別のオプションを使用 array_values()unset():

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */
  // Our initial array
  $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
  print_r($arr);

  // Remove the elements who's values are yellow or red
  $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);

これは、上記のコードから出力されます

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

さて、array_values()うまく数値の配列のインデックスを再作成しますが、それは、配列からすべてのキーの文字列を削除し、数字に置き換えるでしょう。あなたがキー名(文字列)を保持する、またはすべてのキーが数値であれば、配列のインデックスを再作成する必要がある場合は、使用array_merge():

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

出力

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)
$key = array_search($needle, $array);
if ($key !== false) {
    unset($array[$key]);
}
unset($array[$index]);
あなたはすべての値が一意である(あるいは、彼らは非ユニークですが、あなたが特定の値のすべてのインスタンスを削除する)数値添字の配列を持っている場合は、

、あなたは、単にこのように、一致する要素を削除する)(array_diff使用することができます:

$my_array = array_diff($my_array, array('Value_to_remove'));

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

これは、次のように表示されます:

4
3
最初のアレイ、および除去した後3、4のサイズを報告するのsizeof()の呼び出しによって確認することができるように、

この例では、値「チャールズ」を持つ要素を除去します。

また、名前付き要素のために:

unset($array["elementName"]);

破壊する単一要素の配列

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

出力:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

が必要な場合は再度指数の配列:

$array1 = array_values($array1);
var_dump($array1);

その後、出力:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

ポップの要素の末配列 -の値を返し要素除去

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

を出力する

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

削除する最初の要素(赤)の配列から,-の値を返し要素除去

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

出力:

Array
(
    [b] => green
    [c] => blue
)
First Color: red
<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

出力:

Array
(
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
)

fruit1

1はarray_diffで遊ぶことができ、検索を行うことを避けるために:

$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11

この場合、1は、キーを使用/検索する必要はありません。

あなたは、複数の配列の値とその配列内のエントリを削除する必要がある場合は、オブジェクトまたは構造化データであり、[array_filter][1]はあなたの最善の策です。コールバック関数から真を返すようなエントリが保持されます。

$array = [
    ['x'=>1,'y'=>2,'z'=>3], 
    ['x'=>2,'y'=>4,'z'=>6], 
    ['x'=>3,'y'=>6,'z'=>9]
];

$results = array_filter($array, function($value) {
    return $value['x'] > 2; 
}); //=> [['x'=>3,'y'=>6,z=>'9']]

unset() 破壊の指定された変数です。

の挙動 unset() 内の機能によってどのような変動するように破壊する.

場のグローバル変数 unset() 内部機能のみを局所変数が破壊されました。変数の呼び出し環境を保持することを目的として実施し前 unset() が行われようとしていました。

<?php
    function destroy_foo()
    {
        global $foo;
        unset($foo);
    }

    $foo = 'bar';
    destroy_foo();
    echo $foo;
?>

その答えは、上記のコードする バー.

unset() グローバル変数の関数:

<?php
    function foo()
    {
        unset($GLOBALS['bar']);
    }

    $bar = "something";
    foo();
?>

連想配列

連想配列は、 unset を使用する

$arr = array('a' => 1, 'b' => 2, 'c' => 3);
unset($arr['b']);

// RESULT: array('a' => 1, 'c' => 3)
<時間>

数値配列

数値配列の場合、使用 array_splice

$arr = array(1, 2, 3);
array_splice($arr, 1, 1);

// RESULT: array(0 => 1, 1 => 3)

数値配列は、 unset になります使用ないエラーが発生し、それが台無しにあなたのインデックスは以下となります。

$arr = array(1, 2, 3);
unset($arr[1]);

// RESULT: array(0 => 1, 2 => 3)

場合を削除する必要がある複数の要素から連想配列を使用でき array_diff_key() (ここで使用 array_flip()):

$my_array = array(
  "key1" => "value 1",
  "key2" => "value 2",
  "key3" => "value 3",
  "key4" => "value 4",
  "key5" => "value 5",
);

$to_remove = array("key2", "key4");

$result = array_diff_key($my_array, array_flip($to_remove));

print_r($result);

出力:

Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 
// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}

あなたは次の配列があるとします:

Array
(
    [user_id] => 193
    [storage] => 5
)

storageを削除するには、実行します:

unset($attributes['storage']);
$attributes = array_filter($attributes);

そして、あなたが取得します:

Array
(
    [user_id] => 193
)

私はちょうど私が(それは基本的にテーブルをマッピングしたと私はテーブルの列を変更して、そのオブジェクトの属性は、テーブルを反映するだけでなくて変化する変数の属性を持っていた特定のオブジェクトを持っていた言いたいです):

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){}
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]);
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

$fieldsの全体の目的は、ちょうどだったので、私は、彼らが変更されているとき、私はちょうどクラスの始まりを見て、コード内のどこにでも見ていると属性のリストとの $を変更しないでくださいフィールドの配列の内容は、新しい属性を反映してます。

デフォルトの機能に従ってください:

I)

$Array = array("test1", "test2", "test3", "test3");

unset($Array[2]);

II)

$Array = array("test1", "test2", "test3", "test3");

array_pop($Array);

III)

$Array = array("test1", "test2", "test3", "test3");

array_splice($Array,1,2);

IV)

$Array = array("test1", "test2", "test3", "test3");

array_shift($Array);

ソリューション

  1. を削除する場合に、要素を使用 設定を解除():
unset($array[3]);
unset($array['foo']);
  1. 複数削noncontiguous要素にも使用 設定を解除():
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. 削除する複数の連続する要素の利用 array_splice():
array_splice($array, $offset, $length);

さらに説明:

これらの機能をすべて削除し参考文献はこれらの要素からクリアしました。長期保存を希望する場合は、キーの配列が空の値を空の文字列の要素:

$array[3] = $array['foo'] = '';

ほかの構文が論理的関係 設定を解除() 割"の要素となります。最初のう This doesn't exist anymore, 第二言 This still exists, but its value is the empty string.

れば対応番号を割り当0であります。そのため、会社を止め生産モデルのXL1000スプロケットでの更新、在庫:

unset($products['XL1000']);

ただし、一時的になくなっちゃったXL1000スプロケットがたを受け入れる予定の新規出荷工場から今週後半には、このような

$products['XL1000'] = 0;

の場合 設定を解除() 要素PHPを調整し、配列のようにループだが機能していなかったのを修正なコンパクトの配列を記入し、抜け穴があります。それが私がいるすべての配列が連想できな数値配列となる。次に例を示します。

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];  // Prints 'bee'
print $animals[2];  // Prints 'cat'
count($animals);    // Returns 6

// unset()
unset($animals[1]); // Removes element $animals[1] = 'bee'
print $animals[1];  // Prints '' and throws an E_NOTICE error
print $animals[2];  // Still prints 'cat'
count($animals);    // Returns 5, even though $array[5] is 'fox'

// Add a new element
$animals[ ] = 'gnu'; // Add a new element (not Unix)
print $animals[1];  // Prints '', still empty
print $animals[6];  // Prints 'gnu', this is where 'gnu' ended up
count($animals);    // Returns 6

// Assign ''
$animals[2] = '';   // Zero out value
print $animals[2];  // Prints ''
count($animals);    // Returns 6, count does not decrease

コンパクトの配列を埋め尽くされてい数値アレイを使用 array_values():

$animals = array_values($animals);

または、 array_splice() 自動的にreindexes配列を避けなけ穴:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);
Array
(
    [0] => ant
    [1] => bee
    [2] => elk
    [3] => fox
)

これは便利でご利用の場合の配列としてのキューおよび除去したい項目からキューが可能にするランダムアクセス。への安全な取り外しの最初または最後の要素の配列から、使用 array_shift()array_pop(), ます。

未設定()複数の配列から断片化された要素

unset()はそれがunset()は、1回の操作での配列から複数の非連続の要素を削除することが容易になり、複数の変数を受け入れることを言及しなければまだ、ここに何度か言及してきたがます:

// Delete multiple, noncontiguous elements from an array
$array = [ 'foo', 'bar', 'baz', 'quz' ];
unset( $array[2], $array[3] );
print_r($array);
// Output: [ 'foo', 'bar' ]

未設定()動的に

未設定()(動的にかかわらず、それはわずかに容易(解除使用せたであろう))を除去するためにキーの配列を受け付けないので、以下のコードは失敗します。

$array = range(0,5);
$remove = [1,2];
$array = unset( $remove ); // FAILS: "unexpected 'unset'"
print_r($array);

の代わりに、未設定()は、foreachループで動的に使用することができます。

$array = range(0,5);
$remove = [1,2];
foreach ($remove as $k=>$v) {
    unset($array[$v]);
}
print_r($array);
// Output: [ 0, 3, 4, 5 ]

をコピーすることによって、配列のキーを削除します

まだ言及する必要がある別の練習もあります。 時には、特定の配列のキーを取り除くための最も簡単な方法は、単純に$の配列2に$配列1をコピーします。

であります
$array1 = range(1,10);
foreach ($array1 as $v) {
    // Remove all even integers from the array
    if( $v % 2 ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 1, 3, 5, 7, 9 ];

もちろん、同じ練習は、テキスト文字列に適用されます:

$array1 = [ 'foo', '_bar', 'baz' ];
foreach ($array1 as $v) {
    // Remove all strings beginning with underscore
    if( strpos($v,'_')===false ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 'foo', 'baz' ]
<?php
    // If you want to remove a particular array element use this method
    $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");

    print_r($my_array);
    if (array_key_exists("key1", $my_array)) {
        unset($my_array['key1']);
        print_r($my_array);
    }
    else {
        echo "Key does not exist";
    }
?>

<?php
    //To remove first array element
    $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
    print_r($my_array);
    $new_array = array_slice($my_array, 1);
    print_r($new_array);
?>


<?php
    echo "<br/>    ";
    // To remove first array element to length
    // starts from first and remove two element
    $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
    print_r($my_array);
    $new_array = array_slice($my_array, 1, 2);
    print_r($new_array);
?>

出力

 Array ( [key1] => value 1 [key2] => value 2 [key3] =>
 value 3 ) Array (    [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
 Array ( [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
 Array ( [key2] => value 2 [key3] => value 3 )

キーに基づいて配列要素を削除します

以下のようなunset機能を使用します:

$a = array(
       'salam',
       '10',
       1
);

unset($a[1]);

print_r($a);

/*

    Output:

        Array
        (
            [0] => salam
            [2] => 1
        )

*/

値に基づいて配列要素を削除

要素のキーを取得し、以下のような配列要素を除去するために、上記の方法を使用するarray_search関数を使用します。

$a = array(
       'salam',
       '10',
       1
);

$key = array_search(10, $a);

if ($key !== false) {
    unset($a[$key]);
}

print_r($a);

/*

    Output:

        Array
        (
            [0] => salam
            [2] => 1
        )

*/

<?php
    $array = array("your array");
    $array = array_diff($array, ["element you want to delete"]);
?>
「A」:

あなたはのようなものを入れて「削除したい要素を」変数$arrayであなたの配列を作成し、私は入れているところ。そして、あなたはその後、複数の項目を削除する場合:「A」、「B」を

次のコードを使用します:

$arr = array('orange', 'banana', 'apple', 'raspberry');
$result = array_pop($arr);
print_r($result);

あなたが最初の項目のキー名を知らない場合は、インデックスとの順序を保ちながら、配列の最初の項目を削除するための2つの方法でます。

ソリューション#1

// 1 is the index of the first object to get
// NULL to get everything until the end
// true to preserve keys
$array = array_slice($array, 1, null, true);

ソリューション#2

// Rewinds the array's internal pointer to the first element
// and returns the value of the first array element.
$value = reset($array);
// Returns the index element of the current array position
$key = key($array);
unset($array[$key]);
<時間>

このサンプルデータの場合:

$array = array(10 => "a", 20 => "b", 30 => "c");

あなたはこの結果を持っている必要があります:

array(2) {
  [20]=>
  string(1) "b"
  [30]=>
  string(1) "c"
}

キーを取得し、それを削除するにはarray_search使用未設定の場合見つけます:

if (($key = array_search('word', $array)) !== false) {
    unset($array[$key]);
}

のための連想配列は、非整数型キー:

単純に unset($array[$key]) います。

配列の整数をキーとしたい場合を維持するキー

  1. $array = [ 'mango', 'red', 'orange', 'grapes'];

    unset($array[2]);
    $array = array_values($array);
    
  2. array_splice($array, 2, 1);

これは役立つかもしれない...

<?php
    $a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
    $a2 = array("a"=>"purple", "b"=>"orange");
    array_splice($a1, 0, 2, $a2);
    print_r($a1);
?>

結果は次のようになります。

Array ( [0] => purple [1] => orange [c] => blue [d] => yellow )
$arrayName = array( '1' => 'somevalue',
                    '2' => 'somevalue1',
                    '3' => 'somevalue3',
                  );

print_r($arrayName[1]);
// somevalue
unset($arrayName[1]);

print_r($arrayName);

unsetは、インデックスを変更しませんが、array_spliceはいます:

$arrayName = array('1' => 'somevalue',
                   '2' => 'somevalue1',
                   '3' => 'somevalue3',
                   500 => 'somevalue500',
                  );


    echo $arrayName['500'];
    //somevalue500
    array_splice($arrayName, 1, 2);

    print_r($arrayName);
    //Array ( [0] => somevalue [1] => somevalue500 )


    $arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                      );


    echo $arrayName['500'];
    //somevalue500
    unset($arrayName[1]);

    print_r($arrayName);
    //Array ( [0] => somevalue [1] => somevalue500 )
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top