পিএইচপি: একটি অ্যারের থেকে নির্দিষ্ট উপাদান কীভাবে সরাবেন?


160

যখন আমি উপাদানগুলির নাম জানি তখন আমি কীভাবে একটি অ্যারের থেকে কোনও উপাদান সরিয়ে ফেলব? উদাহরণ স্বরূপ:

আমার একটি অ্যারে আছে:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

ব্যবহারকারী প্রবেশ করে strawberry

strawberry সরান হল.

সম্পূর্ণরূপে ব্যাখ্যা করতে:

আমার কাছে একটি ডাটাবেস রয়েছে যা কমা দ্বারা পৃথক আইটেমগুলির একটি তালিকা সঞ্চয় করে। কোডটি ব্যবহারকারীর পছন্দের উপর ভিত্তি করে তালিকায় টান যেখানে সেই পছন্দটি অবস্থিত। সুতরাং, যদি তারা স্ট্রবেরি পছন্দ করে তবে তারা কোডগুলি প্রতিটি প্রবেশের মধ্যে টানা কোডগুলি স্ট্রবেরি অবস্থিত ছিল তবে স্প্লিট () ব্যবহার করে এটিকে অ্যারেতে রূপান্তর করে। আমি তাদের ব্যবহারকারীর পছন্দসই আইটেমগুলি অ্যারে থেকে স্ট্রবেরি উদাহরণস্বরূপ মুছে ফেলতে চাই।


4
একই প্রশ্ন: stackoverflow.com/questions/7225070/...
trante


উত্তর:


296

array_searchকীটি পেতে এবং এটি সন্ধানের সাথে সরিয়ে ফেলতে ব্যবহার করুন unset:

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

array_searchআয় মিথ্যা ( নাল পিএইচপি 4.2.0 পর্যন্ত) যদি কোনো আইটেম পাওয়া গেছে।

এবং যদি একই মান সহ একাধিক আইটেম থাকতে পারে array_keysতবে আপনি সমস্ত আইটেমের কীগুলি পেতে ব্যবহার করতে পারেন :

foreach (array_keys($array, 'strawberry') as $key) {
    unset($array[$key]);
}

একটি বিজোড় ফলাফল প্রাপ্ত। আমি আপনার প্রথম পরামর্শটি ব্যবহার করেছি কারণ সর্বদা কেবলমাত্র একটি উদাহরণ থাকবে instance এটি পরীক্ষা করতে আমি কেবল এটির মূল মান আউটপুট করেছিলাম। কাজ করছে. তবে এটি আনসেট করবে না।
dcp3450

1
যখন (odbc_fetch_row ($ runqueryGetSubmenus)) {men submenuList = odbc_result ($ রানকোয়ারী গেটসুবামানাস, "সাবম্যানাস"); $ submenuArray = split (',', $ submenuList); যদি (($ কী = অ্যারে_সার্চ ($ নাম, $ সাবম্যানুআরে)))! == মিথ্যা) set আনসেট ($ সাবম্যানুআরে [$ কী]); }}
dcp3450

@ ডিসিপিএন ৪৪৫০: এবং আপনি কী করবেন $submenuArray? (নোট করুন যে প্রতিটি লুপের সাথে $submenuArrayওভাররাইট করা হবে))
গম্বো

আমি আরও ভালভাবে ব্যাখ্যা করার জন্য আমার প্রশ্ন আপডেট করেছি। মূলত কোড উদাহরণস্বরূপ নির্বাচিত আইটেমগুলি "স্ট্রবেরি" অপসারণ করে একটি ডাটাবেসে প্রবেশের মাধ্যমে লুপ করে। সুতরাং, ব্যবহারকারী একটি নির্বাচন প্রবেশ করে => কোড সাবমেনাসের নীচে অনুসন্ধান করে এবং যে বিকল্পটি রয়েছে => যে তালিকাটি একটি অ্যারেতে পরিণত করে => নির্বাচিত বিকল্পটি সরিয়ে ফেলবে list
dcp3450

1
আমি বুঝতে পেরেছি! আমি নতুন অ্যারেটি আবার ডিবিতে লিখছিলাম না। আপনি এতক্ষণ কোডের দিকে তাকাতে থাকলে জিনিসগুলি মিস করা সহজ।
dcp3450

153

array_diff()1 লাইন সমাধানের জন্য ব্যবহার করুন :

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string
$array_without_strawberries = array_diff($array, array('strawberry'));
print_r($array_without_strawberries);

... অতিরিক্ত ফাংশন বা ফোরচ লুপের প্রয়োজন নেই।


8
এই সমাধানটি শীর্ষগুলির চেয়ে আরও সুস্পষ্ট।
রবার্ট

যদিও strawberryএটি প্রাথমিক অ্যারে না থাকলেও এটি অ্যারেতে উপলব্ধ হয়ে উঠবে $array_without_strawberries- বিপজ্জনক কোড আপনি যদি নিশ্চিত করতে চান যে প্রদত্ত উপাদানটি অ্যারেতে নেই।
এরফান

5
@ এরফান আপনার দাবিটি ভুল। $a = array_diff(array(), array('strawberry'));- $ a একটি খালি অ্যারে।
ব্যানসর 21

1
আপনি ঠিক @ ব্যান্সার - আমি সম্ভবত অ্যারে_ইন্টারসেক্ট বা অন্য কিছু নিয়ে ভাবছিলাম।
এরফান

1
অ্যারে_ডিফ () চিহ্নিত উত্তরের চেয়ে আরও মার্জিত।
ডোম দাফন্টে

36
if (in_array('strawberry', $array)) 
{
    unset($array[array_search('strawberry',$array)]);
}

2
স্ট্রবেরি আদৌ অ্যারে থাকলে আপনার পরীক্ষা করা উচিত ।
গম্বো

গাম্বোর পরামর্শ অনুসরণ করে অ্যারের থেকে অপসারণের আগে উপাদানটির যাচাইকরণ অন্তর্ভুক্ত করার জন্য উত্তরটির পরিবর্তিত উত্তর।
জন কনডে

2
এও মনে রাখবেন যে কোনও নির্দিষ্ট উপাদান মোছার পরে সূচকগুলি সত্যায়িত হয় না। অন্য কথায়, সূচী ক্রমের ফাঁক থাকবে তখন। যদি আপনি আপনার উদাহরণ থেকে 'স্ট্রবেরি' মুছুন, 'কিউই'তে এখনও সূচক 4 থাকবে এবং সূচক 2 কেবল অদৃশ্য হয়ে যাবে। আপনার কোড সূচী ক্রমের সম্পূর্ণতার উপর নির্ভর করে কিনা তা বিবেচনা করে যেমন উদাহরণ হিসাবে ($ i = 0; $ i <.., $ i ++) লুপগুলি করেন।
দি-কলা-রাজা

2
কলা-রাজা যা বলেছিলেন তা যুক্ত করার জন্য, আপনি যদি অ্যারেটিকে পুনর্নির্মাণ করতে চান তবে কেবল করুন $my_array = array_values($my_array);
রাইগুয়ে

2
যদিও এই সমাধানটি সঠিক, এটি দুটি অ্যারে ( in_arrayএবং array_search) অনুসন্ধান করে । array_searchগম্বোর জবাব হিসাবে প্রত্যাবর্তন ব্যবহার করা আরও কার্যকর
বগদান ডি

21

আপনি যদি এখানে সরল অ্যারে ব্যবহার করে থাকেন (যা ক্ষেত্রে মনে হয়) তবে আপনার পরিবর্তে এই কোডটি ব্যবহার করা উচিত:

if (($key = array_search('strawberry', $array)) !== false) {
    array_splice($array, $key, 1);
}

unset($array[$key]) কেবল উপাদানটি সরিয়ে দেয় কিন্তু প্লেইন অ্যারেটি পুনরায় অর্ডার করে না।

মনে হয় আমাদের একটি অ্যারে রয়েছে এবং অ্যারে_স্প্লাইস ব্যবহার করুন:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
array_splice($array, 2, 1);
json_encode($array); 
// yields the array ['apple', 'orange', 'blueberry', 'kiwi']

আনসেটের তুলনায়:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[2]);
json_encode($array);
// yields an object {"0": "apple", "1": "orange", "3": "blueberry", "4": "kiwi"}

দেখুন কীভাবে unset($array[$key])অ্যারেটিকে পুনরায় অর্ডার করা হয় না।


সরকারীভাবে unsetকিছু ফেরত দেয় না। সুতরাং json_encode(unset($array[2]))একটি তুলনার জন্য অনুমোদিত নয়।
রোবস

এই ঠিক কি আমি ericluwj করতে হবে, thaks হয়
আনা

12

আপনি নির্দিষ্ট শর্তে আইটেমগুলি সরাতে অ্যারে ফিল্টারটি ব্যবহার করতে পারেন $v:

$arr = array_filter($arr, function($v){
    return $v != 'some_value';
});

Downvote। এই নিম্ন-মানের (কারণ এটি একটি কোড-উত্তর মাত্র এবং একটি পার্সিং ত্রুটি দেয়) হ'ল ডি.মার্টিনের পদ্ধতির একটি নকল যা কেবল ভিতরে অনামী ফাংশন ব্যবহার করে array_filter()। যদিও আমি ব্যক্তিগতভাবে আমার বাস্তবায়নে একটি বেনামি ফাংশন ব্যবহার করব, আমি বিশ্বাস করি যে এসও-তে সঠিক পদক্ষেপটি হ'ল আপনি যদি কোনও ক্ষুদ্র উন্নতি করতে চান তবে ডি পৃষ্ঠাগুলির উত্তরটি মন্তব্য করা বা সম্পাদনা করা যাতে এই পৃষ্ঠাটি স্ফীত হয় না। দয়া করে এই সদৃশ উত্তর মুছুন।
মিকম্যাকুসা

4

এরকম হবে:

 function rmv_val($var)
 {
     return(!($var == 'strawberry'));
 }

 $array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

 $array_res = array_filter($array, "rmv_val");

4

এটি একটি সরল পুনরাবৃত্তি যা অ্যারেতে একাধিক মান মুছতে পারে।

    // Your array
    $list = array("apple", "orange", "strawberry", "lemon", "banana");

    // Initilize what to delete
    $delete_val = array("orange", "lemon", "banana");

    // Search for the array key and unset   
    foreach($delete_val as $key){
        $keyToDelete = array_search($key, $list);
        unset($list[$keyToDelete]);
    }

এটি পিএইচপি এর বিকাশকারীরা ইতিমধ্যে যা তৈরি করেছে তার জন্য এটি একটি অদক্ষ, হোম-রোলড প্রতিস্থাপন array_diff()। এটি কীভাবে তিনটি উপার্জন পেয়েছে। কারও এই উত্তরটি সহায়ক বা তাদের নিজস্ব প্রকল্পগুলিতে ব্যবহার করা উচিত নয়। আমি এই উত্তরটি মুছে ফেলার প্রস্তাব দিচ্ছি - এটি আপনার অ্যাকাউন্টকে নিম্নমানের উত্তরের মুক্ত করতে, এই পৃষ্ঠায় উত্তর-ব্লাটকে হ্রাস করতে এবং আপনাকে একটি শৃঙ্খলাবদ্ধ ব্যাজ উপার্জন করবে। আমি আমার ডাউনটাতে স্থগিত করব যাতে আপনার পুরষ্কারের জন্য মুছতে সময় পান।
মিকম্যাকুসা

4

শুধু আপনি একক লাইন করতে পারেন। এটি অ্যারে থেকে উপাদান সরানো হবে


$array=array_diff($array,['strawberry']);


3

আমি বর্তমানে এই ফাংশনটি ব্যবহার করছি:

function array_delete($del_val, $array) {
    if(is_array($del_val)) {
         foreach ($del_val as $del_key => $del_value) {
            foreach ($array as $key => $value){
                if ($value == $del_value) {
                    unset($array[$key]);
                }
            }
        }
    } else {
        foreach ($array as $key => $value){
            if ($value == $del_val) {
                unset($array[$key]);
            }
        }
    }
    return array_values($array);
}

আপনি কোনও অ্যারের ইনপুট করতে পারেন বা উপাদান (গুলি) দিয়ে কেবল একটি স্ট্রিং যা অপসারণ করা উচিত। এটি লিখুন:

$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$detils = array_delete(array('orange', 'apple'), $detils);

অথবা

$detils = array_delete('orange', $detils);

এটি এটি পুনর্নির্মাণও করবে।


2
এটি মারাত্মকভাবে সংশ্লেষিত এবং লুপী। কিভাবে এই উপার্জন 3 উপার্জন?!?
মিকম্যাকুসা

2

এই প্রশ্নের বেশ কয়েকটি উত্তর রয়েছে তবে আমি আরও কিছু যুক্ত করতে চাই কারণ যখন আমি ব্যবহার করেছি unsetবাarray_diff নির্দিষ্ট উপাদানটি সরানো হয়েছিল আমি যখন নতুন অ্যারের সূচকগুলি নিয়ে খেলতাম বেশ কয়েকটি সমস্যা ছিল (কারণ প্রাথমিক সূচকটি সংরক্ষণ করা হয়)

আমি উদাহরণে ফিরে পাই:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_without_strawberries = array_diff($array, array('strawberry'));

অথবা

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[array_search('strawberry', $array)]);

আপনি ফলাফলটি মুদ্রণ করলে আপনি পাবেন:

foreach ($array_without_strawberries as $data) {
   print_r($data);
}

ফলাফল :

> apple
> orange
> blueberry
> kiwi

তবে সূচীগুলি সংরক্ষণ করা হবে এবং তাই আপনি আপনার উপাদানগুলিতে অ্যাক্সেস পাবেন:

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[3] > blueberry
$array_without_strawberries[4] > kiwi

এবং তাই চূড়ান্ত অ্যারে পুনরায় সূচী হয় না। সুতরাং আপনার পরে unsetবা যোগ করার প্রয়োজন array_diff:

$array_without_strawberries = array_values($array);

এর পরে আপনার অ্যারেতে একটি সাধারণ সূচক থাকবে:

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[2] > blueberry
$array_without_strawberries[3] > kiwi

এই পোস্ট সম্পর্কিত: পুনরায় সূচি অ্যারে

এখানে চিত্র বর্ণনা লিখুন

আশা করি এটি সাহায্য করবে


1

আরও ভাল পদ্ধতির হতে পারে আপনার মানগুলি কোনও এসোসিয়েটিভ অ্যারেতে কী হিসাবে রাখা এবং তারপরে array_keys()আপনি যখন প্রকৃত অ্যারে চান তখন এটিকে কল করুন। array_searchআপনার উপাদানটি খুঁজে পেতে আপনাকে এইভাবে ব্যবহার করার দরকার নেই ।


1
আপনার পোস্ট একটি মন্তব্য নয় একটি উত্তর। প্রশ্নটি নিজেই মুছুন এবং পোস্ট করুন।
মিকম্যাকুসা

1

পিএইচপি অ্যারের উত্তর মুছে ফেলুন (কী নয়) https://stackoverflow.com/users/924109/rok-kralj দ্বারা দেওয়া হয়েছে

IMO হ'ল সর্বোত্তম উত্তর হ'ল এটি মুছে ফেলা এবং রূপান্তরিত করে না

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

এটি দুর্দান্তভাবে জেনারেলাইজ করে, আপনি চাইলে একই সময়ে আপনার পছন্দ মতো অনেকগুলি উপাদান সরিয়ে ফেলতে পারেন।

অস্বীকৃতি: নোট করুন যে আমার দ্রবণটি অ্যারেটির একটি নতুন অনুলিপি তৈরি করে এবং পুরানোটিকে গ্রহণযোগ্য উত্তরের বিপরীতে অক্ষত রাখে যা পরিবর্তিত হয়। এটি কারণ হতে পারে এটি কিছুটা ধীর হতে পারে।


1

আমি একই প্রশ্নের উত্তর খুঁজছিলাম এবং এই বিষয় জুড়ে এসেছি। সমন্বয়: আমি দুটি প্রধান উপায় দেখতে array_search& unsetএবং ব্যবহার array_diff। প্রথম নজরে, আমার কাছে মনে হয়েছিল যে প্রথম পদ্ধতিটি দ্রুততর হবে, যেহেতু অতিরিক্ত অ্যারে তৈরি করার প্রয়োজন নেই (যেমন ব্যবহার করার সময় array_diff)। তবে আমি একটি ছোট বেঞ্চমার্ক লিখেছি এবং নিশ্চিত করেছি যে দ্বিতীয় পদ্ধতিটি আরও সংক্ষিপ্ত নয়, আরও দ্রুত! এটি আপনার সাথে ভাগ করে নিতে পেরে আনন্দিত। :)

https://glot.io/snippets/f6ow6biaol


0

আমি অ্যারেগুলিতে কীগুলি অনুসন্ধান করতে অ্যারে_কি_এক্সজিস্টগুলি ব্যবহার করতে পছন্দ করব :

Array([0]=>'A',[1]=>'B',['key'=>'value'])

নির্দিষ্টভাবে কার্যকরভাবে সন্ধান করতে, যেহেতু অ্যারে_সার্ক এবং ইন_আরে () এখানে কাজ করে না। এবং আনসেট () দিয়ে স্টাফ সরিয়ে ফেলুন

আমি মনে করি এটি কাউকে সাহায্য করবে।


0

নির্দিষ্ট অ্যারের মানটি মুছে ফেলা সহ সংখ্যাযুক্ত অ্যারে তৈরি করুন

    <?php
    // create a "numeric" array
    $animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive');

    //Normarl display
    print_r($animals);
    echo "<br/><br/>";

    //If splice the array
    //array_splice($animals, 2, 2);
    unset($animals[3]); // you can unset the particular value
    print_r($animals);

    ?>

আপনি এই লিঙ্কটি উল্লেখ করতে পারেন ..


Downvote। প্রশ্নটি পরিষ্কারভাবে মানটির (কোন কী নয়) উপর ভিত্তি করে কোনও মান সরিয়ে দিতে বলে। এই উত্তরটি অকেজো, দয়া করে মুছুন।
মিকম্যাকুসা


-1

ব্যবহার করে array_seach(), নিম্নলিখিত চেষ্টা করুন:

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

array_search()এটি যে উপাদানটি খুঁজে পায় তার কীটি প্রদান করে, যা মূল অ্যারেটি ব্যবহার করে সেই উপাদানটি সরানোর জন্য ব্যবহার করা যেতে পারে unset()। এটি FALSEব্যর্থতায় ফিরে আসবে , তবে এটি সাফল্যের জন্য একটি "ভুয়া" মান ফিরিয়ে দিতে পারে (আপনার কী 0উদাহরণস্বরূপ হতে পারে ), এজন্যই কঠোর তুলনা !==অপারেটর ব্যবহার করা হয়।

if()বিবৃতি চেক করবে কিনা array_search()একটি মান ফিরে, এবং যদি তা শুধুমাত্র একটি কর্ম সঞ্চালন করা হবে।


3
Downvote। এটি গম্বোর পদ্ধতির একটি নকল (বর্তমানে স্বীকৃত সমাধান) যা আপনার কয়েক বছর আগে পোস্ট করা হয়েছিল। সদৃশ উত্তরের কোনও মূল্য নেই এবং কেবলমাত্র অপ্রয়োজনীয় পৃষ্ঠাটি ফুলে যাওয়ার কারণ। আপনার উত্তর মুছুন। আপনি যদি গম্বোর উত্তরটি ব্যাখ্যা করতে চান তবে তার উত্তরে একটি সম্পাদনা করুন বা
গম্বোকে

-1
unset($array[array_search('strawberry', $array)]);

2
Downvote। array_search()- unset()পদ্ধতি ইতিমধ্যে পুলিশের সামনে জন Conde বছর পোস্ট করা হয়েছে। সদৃশ জবাবগুলির পাঠকদের কাছে কোনও মূল্য নেই এবং অকার্যকর তথ্য স্ক্রোল করার সময় এবং পড়ার সময় নষ্ট হওয়ার কারণে এটি আসলে একটি অসুবিধা। দয়া করে এই উত্তরটি মুছুন।
মিকম্যাকুসা

-1
<?php 
$array = array("apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>

2
ক) কোডটি কী করে, এবং খ) কেন আপনি অন্যান্য সমস্ত উত্তরের মধ্যে এটি একটি বিকল্প হিসাবে কেন মনে করেন সে সম্পর্কে একটি বা দুটি বাক্য লিখে আপনি এই উত্তরটি উন্নত করতে পারেন।
রবিন ম্যাকেনজি

-1
foreach ($get_dept as $key5 => $dept_value) {
                if ($request->role_id == 5 || $request->role_id == 6){
                    array_splice($get_dept, $key5, 1);
                }
            }

4
আপনি যে জবাব দিয়েছেন তা ছাড়াও দয়া করে কেন এবং কীভাবে এটি সমস্যার সমাধান করে তার সংক্ষিপ্ত বিবরণ দেওয়ার জন্য দয়া করে বিবেচনা করুন।
jtate

-2
$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
     function remove_embpty($values)
     {
        if($values=='orange')
        {
            $values='any name';
        }
        return $values;
     }
     $detils=array_map('remove_embpty',$detils);
    print_r($detils);

2
দয়া করে ব্যাখ্যা যুক্ত করুন। এটি কীভাবে সমস্যার সমাধান করে।
রহিল উজির

আপনার উত্তর একটি অ্যারের সরানোর জন্য অ্যারের একটি উপাদানকে অন্য NO এ প্রতিস্থাপন করে
আহমাদ হামেদ

Downvote। এই উত্তরটি প্রত্যাশিত আউটপুট সরবরাহ করে না। দয়া করে এই ভুল উত্তরটি মুছুন।
মিকম্যাকুসা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.