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





15 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)
} */
push functions in

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

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




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



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




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

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_diff :

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

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




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



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



أود فقط أن أقول أن لدي كائنًا معينًا ، كان له سمات متغيرة (كان يرسم جدولًا بشكل أساسي وكنت أغير الأعمدة في الجدول ، لذا فإن السمات الموجودة في الكائن ، والتي تعكس الجدول ستختلف أيضًا

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 {}
        }
    }
}

كان الغرض بالكامل من حقول $ هو فقط حتى لا أكون بحاجة للبحث في كل مكان في الشفرة عندما يتم تغييرها ، فأنا أنظر فقط إلى بداية الفصل الدراسي وقمت بتغيير قائمة السمات ومحتوى مصفوفة حقول $ لعكس سمات جديدة.

استغرق مني بعض الوقت لمعرفة ذلك. آمل أن يساعد هذا أحدهم.




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

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

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

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

وستحصل على:

Array
(
    [user_id] => 193
)



<?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 مثل أدناه:

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



يمكنك ببساطة استخدام unset() لحذف صفيف.

تذكر أنه يجب عدم تعيين الصفيف بعد الدالة foreach .




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




Related


Tags

php   arrays