شرح - print array php




PHP: حذف عنصر من صفيف (20)

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 )

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

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


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' ]

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

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

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

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


أيضًا ، لعنصر مسمى:

unset($array["elementName"]);

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


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

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

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

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

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

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

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

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

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


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

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

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

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

وستحصل على:

Array
(
    [user_id] => 193
)

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

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

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


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

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


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

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

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


  // 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]);
}

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

    echo $fruit;
?>

انتاج:

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

fruit1

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

// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}






arrays