PHP: حذف عنصر من صفيف


14 Answers

تجدر الإشارة إلى أن 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)
} */
Question

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

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




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

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

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




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

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

*/



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

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



إذا كان عليك حذف قيم متعددة في مصفوفة وكانت الإدخالات في هذا المصفوفة كائنات أو بيانات منظمة ، [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']]



هنا طريقة أبسط لحذف مع foreach و unset.

$array=[1,2,4,7,5,6];
$elementToDelete = 4;
foreach ($array as $key=>$value)
       {
           if($value == $elementToDelete)unset($array[$key]);
       }
print($array);

النتيجة: Array ([0] => 1 [1] => 2 [2] => 7 [3] => 5 [4] => 6) تتم إزالة العنصر 4.




إذا كان لديك صفيف مفهرس رقميًا حيث تكون جميع القيم فريدة (أو أنها غير فريدة من نوعها ولكنك ترغب في إزالة جميع مثيلات قيمة معينة) ، يمكنك ببساطة استخدام 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
(
    [user_id] => 193
    [storage] => 5
)

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

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

وستحصل على:

Array
(
    [user_id] => 193
)



عند حذف عنصر من صفيف في PHP ، فإن وظيفة جيدة للاستخدام هي وظيفة unset. هذا مثال على استخدامه:

$anArray = array("X", "Y", "Z");

unset($anArray[0]);

//'dumps' the content of $anArray to the page:
var_dump($anArray);  

سيكون ناتج الدالة var_dump:

array(2) { [1]=> string(1) "Y" [2]=> string(1) "Z" }



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



محاليل:

  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() :

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



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

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



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

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




Related



Tags

php php   arrays