arrays شرح - PHP:حذف عنصر من صفيف




push functions (25)

هذا قد يساعد ...

<?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 )

هل هناك طريقة سهلة لحذف عنصر من صفيف باستخدام PHP ، بحيث لم يعد foreach ($array) يتضمن هذا العنصر؟

ظننت أن وضعه على null سيفعل ذلك ، لكن يبدو أنه لا يعمل.


تدمير عنصر واحد من مجموعة

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

بالنسبة إلى المصفوفات النقابية ، مع وجود مفاتيح غير صحيحة:

ببساطة ، سوف يعمل unset($array[$key]) .

للصفائف التي تحتوي على مفاتيح صحيحة وإذا كنت ترغب في الحفاظ على المفاتيح الخاصة بك:

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

unset($array[2]); $array = array_values($array);

  1. array_splice($array, 2, 1);

إذا كنت بحاجة إلى إزالة عناصر متعددة من صفيف array_diff_key() ، فيمكنك استخدام 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 ) 

unset($array[$index]);

لنفترض أن لديك صفيفًا كهذا:

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

لحذف storage ، قم بما يلي:

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

وستحصل على:

Array
(
    [user_id] => 193
)

إزالة عنصر مصفوفة استنادًا إلى المفتاح:

استخدم وظيفة 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
)

*/

  // 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
)

اتبع الوظائف الافتراضية

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);

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();
?>

إذا كان عليك حذف قيم متعددة في مصفوفة وكانت الإدخالات في هذا المصفوفة كائنات أو بيانات منظمة ، [array_filter][1] هو أفضل رهان. سيتم الاحتفاظ تلك الإدخالات التي ترجع true من وظيفة رد الاتصال.

$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 () تقبل متغيرات متعددة مما يجعل من السهل حذف عناصر متعددة غير متسلسلة من صفيف في عملية واحدة:

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

unset () بشكل حيوي

لا يقبل unset () مجموعة من المفاتيح لإزالتها ، لذا سيفشل التعليمة البرمجية أدناه (قد يكون من الأسهل قليلاً استخدام unset () بشكل حيوي على الرغم من ذلك).

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

بدلاً من ذلك ، يمكن استخدام unset () بشكل حيوي في حلقة foreach:

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

قم بإزالة مفاتيح الصفيف بنسخ المصفوفة

هناك أيضًا ممارسة أخرى لم يتم ذكرها بعد. في بعض الأحيان ، فإن أبسط طريقة للتخلص من مفاتيح صفيف معينة هي ببساطة نسخ $ array1 إلى $ array2.

$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
$array = array("your array");
$array = array_diff($array, ["element you want to delete"]);
?>

قم بإنشاء الصفيف الخاص بك في صفيف $ المتغير ومن ثم وضع 'العنصر الذي تريد حذفه' ، فأنت تضع شيئًا مثل: "a". وإذا كنت ترغب في حذف عدة ثم: "أ" ، "ب".


محاليل:

  1. لحذف عنصر واحد ، استخدم unset() :
unset($array[3]);
unset($array['foo']);
  1. لحذف عناصر متعددة غير متسلسلة ، استخدم أيضًا unset() :
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. لحذف عناصر متعددة متجاورة ، استخدم array_splice() :
array_splice($array, $offset, $length);

المزيد من التوضيح:

يؤدي استخدام هذه الوظائف إلى إزالة جميع الإشارات إلى هذه العناصر من PHP. إذا كنت تريد الاحتفاظ بمفتاح في الصفيف ، ولكن مع قيمة فارغة ، قم بتعيين السلسلة الفارغة إلى العنصر:

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

إلى جانب بناء الجملة ، هناك فرق منطقي بين استخدام unset() وتعيين "" إلى العنصر. الأول يقول أن This doesn't exist anymore, بينما يقول الثاني إن This still exists, but its value is the empty string.

إذا كنت تتعامل مع الأرقام ، فقد يكون تعيين الصفر بديلاً أفضل. لذلك ، إذا توقفت الشركة عن إنتاج نموذج XL1000 ضرس ، فإنها ستقوم بتحديث مخزونها مع:

unset($products['XL1000']);

ومع ذلك ، إذا تم تشغيله مؤقتًا من أسنان العجلة XL1000 ، ولكنه كان يخطط لاستقبال شحنة جديدة من المصنع في وقت لاحق من هذا الأسبوع ، فهذا أفضل:

$products['XL1000'] = 0;

إذا قمت unset() عنصر ، تقوم 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 new element
$animals[ ] = 'gnu'; // add 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() إعادة array_splice() المصفوفات تلقائيًا لتجنب ترك الثقوب:

// 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($array["elementName"]);

هناك طرق مختلفة لحذف عنصر الصفيف ، حيث يكون بعضها أكثر فائدة لبعض المهام المحددة من البعض الآخر.

حذف عنصر صفيف واحد

إذا كنت تريد حذف عنصر صفيف واحد فقط ، فيمكنك استخدام unset() أو array_splice() بديل.

أيضًا إذا كان لديك القيمة ولا تعرف المفتاح لحذف العنصر ، يمكنك استخدام array_search() للحصول على المفتاح.

طريقة unset()

لاحظ أنه عند استخدام unset() لن تتغير مفاتيح الصفيف / reindex. إذا كنت تريد إعادة فهرسة المفاتيح ، يمكنك استخدام array_values() بعد unset() والتي ستحول جميع المفاتيح إلى مفاتيح رقمية معددة بدءًا من 0.

الشفرة

<?php

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

?>

انتاج |

Array (
    [0] => a
    [2] => c
)

طريقة array_splice()

إذا كنت تستخدم array_splice() ، فسيتم إعادة array_splice() المفاتيح تلقائيًا ، ولكن لن تتغير مفاتيح الارتباطات بدلاً من array_values() التي ستحول جميع المفاتيح إلى مفاتيح رقمية.

كما array_splice() إلى الإزاحة وليس المفتاح! كمعلمة الثانية.

الشفرة

<?php

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

?>

انتاج |

Array (
    [0] => a
    [1] => c
)

array_splice() نفس unset() المصفوفة بالرجوع ، وهذا يعني أنك لا تريد تعيين قيم الإرجاع لهذه الوظائف مرة أخرى إلى الصفيف.

حذف عناصر مجموعة متعددة

إذا كنت ترغب في حذف عناصر صفيف متعددة ولا تريد استدعاء unset() أو array_splice() عدة مرات ، يمكنك استخدام الدالتين array_diff() أو array_diff_key() بناءً على ما إذا كنت تعرف القيم أو مفاتيح العناصر التي تريد الحذف.

طريقة array_diff()

إذا كنت تعرف قيم عناصر الصفيف التي تريد حذفها ، فيمكنك استخدام array_diff() . كما كان من قبل مع unset() لن يتغير / reindex مفاتيح الصفيف.

الشفرة

<?php

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

?>

انتاج |

Array (
    [1] => b
)

طريقة array_diff_key()

إذا كنت تعرف مفاتيح العناصر التي تريد حذفها ، فأنت تريد استخدام array_diff_key() . هنا عليك التأكد من تمرير المفاتيح كمفاتيح في المعلمة الثانية وليس كقيم. خلاف ذلك ، يجب عليك عكس الصفيف مع array_flip() . وهنا أيضا لن تتغير المفاتيح / reindex.

الشفرة

<?php

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

انتاج |

Array (
    [1] => b
)

إذا كنت تريد أيضًا استخدام unset() أو array_splice() لحذف عناصر متعددة بنفس القيمة ، يمكنك استخدام array_keys() للحصول على كافة المفاتيح لقيمة محددة ثم حذف كافة العناصر.


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

<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

انتاج:

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

fruit1

صفائف الارتباط

للصفائف النقابية ، استخدم 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 () لإزالة عنصر مطابقة ، مثل:

$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

في هذا المثال ، تتم إزالة العنصر ذو القيمة 'Charles' كما يمكن التحقق منه بواسطة الاستدعاءات sizeof () التي تبلغ حجم 4 للمصفوفة الأولية ، و 3 بعد الإزالة.


$x = array(1, 2, 3, 4, 5);
var_dump($x);
unset($x[3]); // here is key to be delete
echo '<br>';
array_values($x);
var_dump($x);


لتجنب القيام ببحث يمكن للمرء أن يلعب مع array_diff :

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

في هذه الحالة ، لا يحتاج المرء إلى البحث / استخدام المفتاح.


<?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() ستحافظ على الفهرسة دون أن تمس ، وهو ما تتوقعه عند استخدام فهارس السلسلة (صفيف كما هو موجود) ، ولكن قد يكون من المفاجئ عند التعامل مع صفائف ذات فهرسة صحيحة:

$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)
} */

لديك مجموعة من 1 إلى 9 وتريد إزالة 5 استخدام أدناه رمز.

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var newNumberArray = numberArray.filter(m => {
  return m !== 5;
});

console.log("new Array, 5 removed", newNumberArray);

إذا كنت ترغب في قيمة متعددة السابقين: - 1،7،8

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var newNumberArray = numberArray.filter(m => {
  return (m !== 1) && (m !== 7) && (m !== 8);
});

console.log("new Array, 5 removed", newNumberArray);

إذا كنت ترغب في إزالة قيمة المصفوفة في الصفيف السابق: - [3،4،5]

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var removebleArray = [3,4,5];

var newNumberArray = numberArray.filter(m => {
    return !removebleArray.includes(m);
});

console.log("new Array, [3,4,5] removed", newNumberArray);

يتضمن متصفح معتمد هو link





php arrays