অ্যারে এলিমেন্টটি কীভাবে সরানো হবে এবং তারপরে অ্যারে পুনরায় সূচি কীভাবে?


206

একটি অ্যারে নিয়ে আমার কিছু সমস্যা আছে। আমার একটি অ্যারে রয়েছে যা আমি নীচের মত পরিবর্তন করতে চাই। আমি সূচকের মাধ্যমে এর উপাদান (উপাদানগুলি) মুছে ফেলতে চাই এবং তারপরে পুনরায় সূচকের অ্যারে চাই। এটা কি সম্ভব?

$foo = array(

    'whatever', // [0]
    'foo', // [1]
    'bar' // [2]

);

$foo2 = array(

    'foo', // [0], before [1]
    'bar' // [1], before [2]

);

উত্তর:


456
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array

6
এটিই আমি পোস্ট করতে চেয়েছিলাম, +1।
মিশিগেল পেটার

4
এটি যদি ছদ্মবেশের সমাধানের চেয়ে ভাল তবে যদি বেশ কয়েকটি আইটেম একবারে সরানোর প্রয়োজন হয় - যদি এই আইটেমগুলির সূচি পূর্বে সংগ্রহ করা হয়। আপনি প্রথম আইটেমটিতে একবার অ্যারে_স্প্লাইস ব্যবহার করলে, আপনি বাকী আইটেমের সূচকগুলি হারাবেন।
জোনিস এলমারিস

23
এটি লক্ষণীয় যে আপনি একক আনসেট কলটিতে একাধিক ভেরিয়েবল / অ্যারে সূচকগুলি আনসেট করতে পারেনunset($foo[0], $foo[3], $bar[1]);
4

খুব সুন্দর সমাধান ভাই :)
মাইকেল কিসিলেনকো

আমি এই ব্যবহার। ধন্যবাদ. আমি ব্যবহার করছিলাম array_splice, এবং এটি 0 তম এবং 1 ম সূচকগুলির জন্য কাজ করে না।
দ্য গ্রিনক্যাবেজ


29

আপনি আরও ভাল ব্যবহার array_shift()। এটি অ্যারের প্রথম উপাদানটি ফিরিয়ে আনবে, অ্যারে থেকে এটি সরিয়ে ফেলবে এবং অ্যারেটিকে আবার সূচীকরণ করবে। সবই এক দক্ষ পদ্ধতিতে।


2
প্রক্রিয়াটিতে অ্যারের পুনর্নির্মাণের পরে আপনি প্রথম অ্যারে উপাদানটি পুনরুদ্ধার করতে এবং তারপরে মুছতে চাইলে এটি ঠিক আছে। এর কাউন্টার পার্ট ফাংশনটি array_pop()আপনার প্রয়োজন হলে শেষ অ্যারে উপাদানটি পুনরুদ্ধার এবং সরিয়ে ফেলবে। তবে, অ্যারের মাঝখানে কোনও উপাদান নিয়ে কাজ করার জন্য উভয়ই ফাংশন করা যায় না।
ডেরিক মিলার

1
যদিও এটি অরথোগোনালি সম্পর্কিত, প্রশ্নটি প্রথমটি নয়, একটি অ্যারের কোনও উপাদান সম্পর্কে স্পষ্টতই প্রশ্ন ।
ফলিক্স গাগনন-গ্রেনিয়ার


9
Unset($array[0]); 

Sort($array); 

আমি জানি না কেন এটি হ্রাস করা হচ্ছে, তবে যদি কেউ এটি চেষ্টা করে বিরক্ত করেন তবে আপনি খেয়াল করবেন এটি কার্যকরভাবে কাজ করে। অ্যারেতে বাছাইয়ের সাহায্যে অ্যারের কীগুলি পুনরায় নিয়োগ করা হয়। একমাত্র ত্রুটি এটি মানগুলি বাছাই করে। যেহেতু কীগুলি স্পষ্টতই পুনরায় নিয়োগ দেওয়া হবে, এমনকি array_valuesএটির সাথেও , মানগুলি সাজানো হচ্ছে কি না তা বিবেচ্য নয়।


9
এমনকি কীগুলি পুনরায় নিয়োগ দেওয়া হলেও সঠিক উত্তরে প্রাথমিক ক্রমটি রাখা হবে।
s3v3n

1
"আমি সূচকের মাধ্যমে এর উপাদানগুলি (উপাদানগুলি) মুছে ফেলতে চাই এবং তারপরে অ্যারে পুনরায় সূচী করে তুলতে চাই it এটা কি সম্ভব?" @ s3v3n ওপি প্রাথমিক ক্রম বজায় রাখার জন্য কখনও জিজ্ঞাসা করেনি। আমি কেবল একটি সমাধান সরবরাহ করেছি যা কাজ করে এবং যা বর্ণিত হয় তা করে।
হিমশীতল

1
প্রশ্নটি 2 বছরের পুরনো। যেতে দাও!
s3v3n

@ s3v3n এটি কোনও ক্ষোভ নয়। আমি শুধু কেন জানতে ইচ্ছুক। স্পষ্টতই পরবর্তী উত্তরগুলির উন্নতি করা। আমি সম্মত হই যে আরও ভাল পদ্ধতি আছে তবে এই উত্তরটি এত খারাপ হওয়ার কোনও কারণ আছে? এটা কি পারফরম্যান্স? ইত্যাদি? একই কারণে আমি এসও তে আছি, শিখার পাশাপাশি শেখাতেও।
হিমশীতল

সাধারণ পরিস্থিতিতে, প্রোগ্রামারটির ইনপুট যেমন হয় ঠিক একই ক্রমে সেই মানগুলির প্রয়োজন হবে এমনটি খুব সম্ভবত। উদাহরণস্বরূপ ডাটাবেস থেকে কিছু সারি একটি টেবিলে প্রদর্শিত হওয়া উচিত; বা একটি চ্যাট অ্যাপ্লিকেশন যেখানে উত্তরগুলি ঠিক একই ক্রমে হওয়া উচিত। উদাহরণগুলির সংখ্যা অসীম হতে পারে, পয়েন্টটি হ'ল বেশিরভাগ ক্ষেত্রে ক্রমটি একই হওয়া দরকার বা কমপক্ষে প্রোগ্রামার অ্যারেতে থাকা উপাদানগুলির একই ক্রমের প্রত্যাশা করবে।
s3v3n

4

সাথে চেষ্টা করুন:

$foo2 = array_slice($foo, 1);

এটি কেবল প্রথম উপাদানটির জন্য কাজ করে তবে একটি স্বেচ্ছাসেবক উপাদান নয়।
ফেলিক্স ক্লিং

0

এক্সজিফারের উত্তর ছাড়াও

কাজ

function custom_unset(&$array=array(), $key=0) {
    if(isset($array[$key])){

        // remove item at index
        unset($array[$key]);

        // 'reindex' array
        $array = array_values($array);

        //alternatively
        //$array = array_merge($array); 

    }
    return $array;
}

ব্যবহার

$my_array=array(
    0=>'test0', 
    1=>'test1', 
    2=>'test2'
);

custom_unset($my_array, 1);

ফলাফল

 array(2) {
    [0]=>
    string(5) "test0"
    [1]=>
    string(5) "test2"
  }

0

আপনি যদি ব্যবহার করেন array_mergeতবে এটি কীগুলি পুনর্নির্মাণ করবে। ম্যানুয়ালটিতে বলা হয়েছে:

সংখ্যার কীগুলির সাথে ইনপুট অ্যারেতে মানগুলি ফলাফল অ্যারেতে শূন্য থেকে শুরু করে ইনক্রিমেন্টিং কীগুলির সাথে পুনর্নবীকরণ করা হবে।

http://php.net/manual/en/function.array-merge.php

আমি এখানেই মূল উত্তরটি পেয়েছি।

http://board.phpbuilder.com/showthread.php?10299961-Reset-index-on-array-after-unset ()

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