PHP හි අරාවකින් මූලද්‍රව්‍යයක් මකා දැමීම


2525

PHP භාවිතා කරමින් අරාවකින් මූලද්‍රව්‍යයක් මකා දැමීමට පහසු ක්‍රමයක් තිබේද? foreach ($array) තිබේද?

මම සිතුවේ එය සැකසීම එය කරයි nullකියා, නමුත් පෙනෙන ආකාරයට එය ක්‍රියාත්මක නොවේ.


14
ප්‍රකාශිත ගැටලුවට සරළම පිළිතුර කොන්රාඩ් පිළිතුර බව මම නොසිතමි. unset()අරාව හරහා පුනරාවර්තනයන් සමඟ ඉවත් කළ අගය තවදුරටත් ඇතුළත් නොවේ. OTOH, ස්ටීවන් පිළිතුර ප්‍රමාණවත් බව ඇත්ත, ඇත්ත වශයෙන්ම, මම සොයන පිළිතුර - නමුත් OP නොවේ :)
brandizzi

32
andanip අත්පොතෙහි පහසුවෙන් සොයාගත හැකි වීම StackOverflow පිළිබඳ ප්‍රශ්නයක් වළක්වන්නේ නැත. ප්‍රශ්නය අනුපිටපත් ස්ටැක් ඕවර්ෆ්ලෝ ප්‍රශ්නයක් නම්, එය මෙහි අයත් නොවිය හැකිය. අත්පොත බැලීමට පෙර පවා යන්න විකල්පයක් ලෙස පිළිතුරු සොයා ගැනීමට StackOverflow හොඳ ස්ථානයකි.
ඩෑන් නිසෙන්බෝම්

5
etunset ($ array [$ key]); $ array = array_values ​​($ array);
ට්‍රෝජන්


ඔබ අරා අරා (Associative අරා) සිට යතුරු ඉවත් කිරීමට අවශ්ය නම්, විසඳුමක් බලන්න stackoverflow.com/a/47978980/1045444
සෝමනාත් Muluk

Answers:


2890

අරාව අංගයක් මකා දැමීමට විවිධ ක්‍රම තිබේ, සමහර ඒවා අනෙක් ඒවාට වඩා සමහර විශේෂිත කාර්යයන් සඳහා වඩාත් ප්‍රයෝජනවත් වේ.

එක් අරාව අංගයක් මකන්න

ඔයා එක මාලාවක් අංගයක් ඉවත් කිරීමට අවශ්ය නම් ඔබට භාවිතා කළ හැකි 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()යතුර නොව ඕෆ්සෙට් අවශ්‍ය වේ! දෙවන පරාමිතිය ලෙස.

කේතය

<?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()එය අරාවෙහි යතුරු වෙනස් නොකරයි / නැවත සම්බන්ධ නොකරයි.

කේතය

<?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() . තවද මෙහි යතුරු වෙනස් නොවේ / රින්ඩෙක්ස් නොවේ.

කේතය

<?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()මකා දැමීමට \array_keys()අවශ්‍ය නම් නිශ්චිත අගයක් සඳහා සියලු යතුරු ලබා ගැනීමට සහ සියලු අංග මකා දැමීමට ඔබට භාවිතා කළ හැකිය.


26
Lex ඇලෙක්සැන්ඩ්රුරාඩා නැත, ඔබ කීවේ “මෙය භාවිතා නොකරන්න” - එය විකාරයකි. අරාව යනු කුමක්දැයි ඔබ සලකන විට ඔබට මෙම ක්‍රමය ආරක්ෂිතව භාවිතා කළ හැකිය - ශබ්දකෝෂයක්. ඔබ අඛණ්ඩව සංඛ්‍යා දර්ශක අපේක්ෂා කරන්නේ නම් පමණක් ඔබට වෙනත් දෙයක් භාවිතා කිරීමට අවශ්‍ය වේ.
කොන්රාඩ් රුඩොල්ෆ්

2
Lex array_spliceවෙනත් පිළිතුරු වල විස්තර කර ඇති පරිදි ඇලෙක්සැන්ඩර් භාවිතය .
කොන්රාඩ් රුඩොල්ෆ්

1
@AlexandruRada ඔබට යා හැකි මගක් නොමැත array (3) { [0]=>int(0) ...විට ඔබ unset($x[2])සිට $x = array(1, 2, 3, 4);ප්රතිඵල යුතු විය var_dump($x); // array(3) { [0]=> int(1) [1]=> int(2) [3]=> int(4) }(එය මුද්රණ දෝෂයක් විය හැක)
inemanja

5
unsetබහු තර්ක තිබිය හැක : void unset ( mixed $var [, mixed $... ] ).
Константин Ван

3
array_filter ද ශක්‍ය ක්‍රමයකි. ඔබට අරාව විකෘති කිරීමට අවශ්‍ය නැතිනම් එය හොඳය, නමුත් එය json_encode සමඟ ගැටළුවක් විය හැකි reindex නොවේ. php.net/manual/en/function.json-encode.php#94157
dotnetCarpenter

1360

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

43
ඔබ array_splice () භාවිතා කරන විට ඔබ දැනගත යුතු වන්නේ OFFSET යතුර නොව යතුර නොව ඔබ ඉවත් කිරීමට කැමති ඕනෑම මූලද්‍රව්‍යයක ඕෆ්සෙට් (!)
ටොම්

18
Om ටොම්: සාමාන්‍ය අරාව සඳහා (එය අඛණ්ඩව පූර්ණ-සුචිගත කර ඇත) ඕෆ්සෙට් යනු දර්ශකයයි. එය කරයි array_splice(අන් අය අතර) තේරුමක් හැක.
ස්ටෙෆාන් ගෙහ්රිග්

5
ඔව්, නමුත් මතක තබා ගත යුතු දෙයක් නම්, ඔබ ස්ප්ලයිස් භාවිතා කිරීමට පෙර අරාව සමඟ ගැටී ඇත්නම්
ටොම්

4
දැවැන්ත අරාවකින් මූලද්‍රව්‍ය ටොන් ගණනක් මකාදැමීමේ මූලික පරීක්ෂණයකින්, array_splice ඉතා ඉක්මන් හා අඩු මතක ශක්තියක් ඇති බව පෙනේ. මෙය මා බලාපොරොත්තු වන දේ සමඟ ගැලපේ: array_values ​​() අරාවෙහි පිටපතක් සාදන බව පෙනේ, අරා_ ස්ප්ලයිස් ක්‍රියාත්මක වේ.
ඩග් කැවෙන්ඩෙක්

4
array_values ​​යනු ඔබ ලූපයක මූලද්‍රව්‍ය ඉවත් කරන විට සහ සුචිය ස්ථාවර වීමට අවශ්‍ය විට ප්‍රයෝජනවත් ප්‍රවේශයකි, නමුත් ලූපයෙන් පසුව ඒවා සම්පීඩනය කිරීමට අවශ්‍ය වේ.
රොරික්

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

$ get_merged_values ​​= array_merge ($ data ['res'], $ data ['check_res']); මම මෙම print_r මුද්‍රණය කරන විට ($ get_merged_values); එය පහත දැක්වේ. අරාව ([0] => අරාව ([menu_code] => 2 [menu_name] => පැල [menu_order_no] => 1) [1] => අරාව ([menu_code] => 3 [menu_name] => රේඛාව [menu_order_no] => 2)) නමුත් මට පිළිවෙලින් $ get_merged_values ​​['menu_code'] සහ $ get_merged_values ​​['menu_name'] භාවිතා කරමින් menu get_merged_values ​​[0] [menu_code], $ get_merged_values ​​[0 ] [menu_name]. කරුණාකර මෙය කරන්නේ කෙසේදැයි මට උදව් කරන්න?
හෘද හැකර්

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

4
මෙම පිළිතුර මූලද්‍රව්‍යය මකා දැමීම සඳහා බව ඔබ පැහැදිලි කළ විට එය වටිනාකම දැන සිටියත් යතුර නොවේ. එය මකා දමන්නේ වටිනාකමේ පළමු අවස්ථාව පමණි; වටිනාකමක් සඳහා සියලු යතුරු සොයා ගැනීමට , array_keys
ToolmakerSteve


65

ඔබට සංඛ්‍යාත්මකව සුචිගත කරන ලද අරාවක් තිබේ නම්, සියලු අගයන් අද්විතීය වේ (හෝ ඒවා අද්විතීය නොවන නමුත් විශේෂිත අගයක සියලු අවස්ථා ඉවත් කිරීමට ඔබ අදහස් කරන්නේ නම්), ඔබට ගැලපෙන මූලද්‍රව්‍යයක් ඉවත් කිරීමට සරලවම 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

මෙම උදාහරණයේ දී, 'චාල්ස්' අගය සහිත මූලද්‍රව්‍යය ඉවත් කරනු ලැබේ, ආරම්භක අරාව සඳහා 4 ක ප්‍රමාණයක් වාර්තා කරන ප්‍රමාණයේ () ඇමතුම් මගින් සත්‍යාපනය කළ හැකි අතර, ඉවත් කිරීමෙන් පසු 3 ක්.


64

එසේම, නම් කරන ලද මූලද්රව්යයක් සඳහා:

unset($array["elementName"]);

$a = array("A"=>1, "B"=>2, "C"=>"a"); print_r($a); unset($a["B"]); print_r($a); ලබා දෙයි (ආකෘතිගත කර ඇත): Array ( [A] => 1 [B] => 2 [C] => a ), Array ( [A] => 1 [C] => a )
DefenestrationDay

ඔබට නූලක් මඟින් සුචිගත කරන ලද අරාව මූලද්‍රව්‍ය සැකසිය නොහැකි බව පෙනේ ("මාරාන්තික දෝෂයකි: නූල් ඕෆ්සෙට් සැකසිය නොහැක"). මෙය සැමවිටම එසේ යැයි මම නොසිතමි, නමුත් නිසැකවම PHP 5.3.10 හා බොහෝ විට මීට පෙර
carpii

6
@carpii PHP හට සහායක අරාවකින් මූලද්‍රව්‍ය සැකසිය නොහැක. අරාව වෙනුවට නූලක් මත සැකසූ ($ var ['key']) භාවිතා කිරීමට උත්සාහ කරන විට මාරක දෝෂය ඇතිවේ. උදාහරණයක් ලෙස: $ array = array ('test' => 'value', 'another' => ' අගය', ); unset ($ array ['test']); // අපේක්ෂිත පරිදි අරාව වෙතින් "පරීක්ෂණ" අංගය ඉවත් කරයි $ array = 'test'; unset ($ array ['test']); // බලාපොරොත්තු වන පරිදි "මාරක දෝෂය: නූල් ඕෆ්සෙට් සැකසිය නොහැක"
ජිම්බෝ

මෙන්න ඔබ ප්‍රධාන නම දැන සිටිය යුතුය, එය වඩා හොඳය: stackoverflow.com/a/52826684/1407491
නබි

33

අරාවෙහි තනි අංගයක් විනාශ කරන්න

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

1
මෙම array_shiftනැවත දර්ශකය එය විසින් පූර්ණ සංඛ්යාමය නම් ප්රධාන අයිතම, එම නිසා එය නරක, ඔබ විසින් මෙය භාවිතා කළ හැකි නිසා: stackoverflow.com/a/52826684/1407491
නබි KAZ

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

    echo $fruit;
?>

ප්‍රතිදානය:

[
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
]

fruit1

14
array_shiftඅරාවෙහි පළමු අංගය පමණක් මකා දැමිය හැකි බව සලකන්න . ඒ හා සමානව array_popඅරාවෙහි අවසාන අංගය මකා දැමීමට භාවිතා කරන්න.
ජාසීර්

1
පිළිතුර අදාළ වන්නේ අරාවෙහි පළමු අංගයට පමණක් වන අතර සාමාන්‍ය ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත.
sweisgerber.dev

bsebweisgerber ඔබ නිවැරදියි නමුත් මම හිතන්නේ නැහැ එය වැරදි පිළිතුරක් වන අතර මෙම පිළිතුර අවතක්සේරු කළ යුතුයි. ප්‍රශ්නය වන්නේ කිසියම් ස්ථානයක් සඳහන් නොකරන අංගයක් මකා දැමීමයි.
සෞරබ් චන්ද්‍ර පටෙල්

27

සෙවීමක් කිරීමෙන් වැළකී සිටීමට කෙනෙකුට සෙල්ලම් කළ හැකිය array_diff:

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

මෙම අවස්ථාවේදී යමෙකුට යතුර සෙවීමට / භාවිතා කිරීමට අවශ්‍ය නැත.


21

ඔබට අරාවෙහි බහු අගයන් මකා දැමීමට සිදුවුවහොත් සහ එම අරාවෙහි ඇතුළත් කිරීම් වස්තු හෝ ව්‍යුහාත්මක දත්ත නම්, [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']]

20

සහායක අරා

සහායක අරා සඳහා, භාවිතා කරන්න 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)

19

ඔබට සහායක අරාවකින් බහු අංග ඉවත් කිරීමට අවශ්‍ය නම්, ඔබට array_diff_key () භාවිතා කළ හැකිය (මෙහි අරාව_ෆ්ලිප් () සමඟ භාවිතා වේ :

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

මෙය එතරම් අවතක්සේරු කරන්නේ ඇයි?
Fr0zenFyr

19

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


13

දර්ශකය නියම කර ඇත්නම්:

$arr = ['a', 'b', 'c'];
$index = 0;    
unset($arr[$index]);  // $arr = ['b', 'c']

දර්ශකය නිශ්චිතව දක්වා නොමැති නම්:

$arr = ['a', 'b', 'c'];
$index = array_search('a', $arr); // search the value to find index
if($index !== false){
   unset($arr[$index]);  // $arr = ['b', 'c']
}

මෙම ifනම් නිසා තත්ත්වය අවශ්ය indexසොයා නැත, unset()ස්වයංක්රීයව අපි කැමති දේ නො වන එම අරාව පළමු අංගය මකා ඇත.


10

විසඳුම්:

  1. එක් අංගයක් මකා දැමීමට, setet () භාවිතා කරන්න :
unset($array[3]);
unset($array['foo']);
  1. නොගැලපෙන බහු මූලද්‍රව්‍ය මකා දැමීමට, සැකසූ () ද භාවිතා කරන්න :
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. බහු පරස්පර මූලද්‍රව්‍ය මකා දැමීමට, array_splice () භාවිතා කරන්න :
array_splice($array, $offset, $length);

වැඩිදුර පැහැදිලි කිරීම:

මෙම ශ්‍රිත භාවිතා කිරීමෙන් PHP වෙතින් මෙම මූලද්‍රව්‍යයන් පිළිබඳ සියලු යොමු කිරීම් ඉවත් කරයි. ඔබට අරාව තුළ යතුරක් තබා ගැනීමට අවශ්‍ය නම්, නමුත් හිස් අගයක් සහිතව, හිස් නූල මූලද්‍රව්‍යයට පවරන්න:

$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

අරාව ely න ලෙස පුරවන සංඛ්‍යාත්මක අරාවකට සංයුක්ත කිරීමට, array_values ​​() භාවිතා කරන්න :

$animals = array_values($animals);

විකල්පයක් ලෙස, සිදුරු හැර යාම වළක්වා ගැනීම සඳහා 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 () භාවිතා කරන්න .


8

ඔබට පහත දැක්වෙන අරාව ඇතැයි සිතමු:

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

මකා දැමීමට storage, කරන්න:

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

ඔබට ලැබෙන්නේ:

Array
(
    [user_id] => 193
)

කුමක් සඳහා array_filterභාවිතා කරන්නේද?
ඩේවිඩ්

ව්‍යාජ මූලද්‍රව්‍ය ඉවත් කිරීමට
Tebe

8

විචල්‍ය ගුණාංග සහිත විශේෂිත වස්තුවක් මා සතුව ඇති බව පැවසීමට මම කැමතියි (එය මූලික වශයෙන් වගුවක් සිතියම් ගත කිරීම සහ මම වගුවේ තීරු වෙනස් කරමින් සිටියෙමි, එබැවින් වස්තුවෙහි ගුණාංග, වගුව පිළිබිඹු කිරීම ද වෙනස් වේ):

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සාධාරණයි, එබැවින් ඒවා වෙනස් වූ විට කේතයේ සෑම තැනකම බැලීමට මට අවශ්‍ය නැත, මම පන්තියේ ආරම්භය දෙස බලා ගුණාංග ලැයිස්තුව සහ $ ක්ෂේත්‍ර අරාව අන්තර්ගතය නව පිළිබිඹු කිරීම සඳහා වෙනස් කරමි. ගුණාංග.


8

පෙරනිමි කාර්යයන් අනුගමනය කරන්න:

මම)

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

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

විචල්‍යය තුළ ඔබේ අරාව සාදන්න $array, ඉන්පසු මම 'මකා දැමීමට අවශ්‍ය අංගය' දමා ඇති තැන ඔබ "a" වැනි දෙයක් දමයි. ඔබට බහු අයිතම මකා දැමීමට අවශ්‍ය නම්: "a", "b".


7

යතුර ලබා ගැනීමට array_search භාවිතා කර සොයාගත නොහැකි නම් එය ඉවත් කරන්න:

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

6

අරාවකින් බහු, කැබලි කරන ලද මූලද්‍රව්‍ය සකසන්න

අතර unset()මෙහි සඳහන් කර කිහිප වතාවක් ඇත, එය බව සඳහන් කළ මෙතෙක් unset()එක් ක්රියාත්මක මාලාවක් සිට delete බහු, noncontiguous අංග පහසුවෙන් එය කරමින් බහු විචල්ය පිළිගන්නා:

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

setet () ගතිකව

unset () ඉවත් කිරීම සඳහා යතුරු සමූහයක් භාර නොගනී, එබැවින් පහත කේතය අසාර්ථක වනු ඇත (එය ගතිකව වුවද setet () භාවිතා කිරීම තරමක් පහසු කරවනු ඇත).

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

ඒ වෙනුවට, පෙරනිමි පුඩුවක් තුළ සැකසූ () ගතිකව භාවිතා කළ හැකිය:

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

6

යතුරක් මත පදනම්ව අරාව අංගයක් ඉවත් කරන්න:

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
        )

*/

6

අරාවෙහි පළමු අයිතමය දර්ශකයේ අනුපිළිවෙලින් ඉවත් කිරීම සඳහා ක්‍රම දෙකක් සහ පළමු අයිතමයේ ප්‍රධාන නම ඔබ නොදන්නේ නම්.

විසඳුම # 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");

ඔබට මෙම ප්‍රති result ලය තිබිය යුතුය:

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

5

පහත කේතය භාවිතා කරන්න:

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

4
php5: සරලව ධාවනය array_pop($arr)කිරීමෙන් අවසාන ප්‍රවේශය ඉවත් වේ. `=` අවශ්‍ය නොවේ.
ක්‍රිස් කේ

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

4

පූර්ණ සංඛ්‍යා නොවන යතුරු සහිත සහායක අරා සඳහා:

සරලවම, unset($array[$key])වැඩ කරයි.

පූර්ණ සංඛ්‍යා සහිත අරා සඳහා සහ ඔබේ යතුරු නඩත්තු කිරීමට අවශ්‍ය නම්:

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

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


2

මෙය උදව් විය හැකිය ...

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

ප්රති result ලය වනු ඇත්තේ:

Array ( [0] => purple [1] => orange [c] => blue [d] => yellow )

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

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

print_r($arrayName);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.