পিএইচপি সহযোগী অ্যারে থেকে উপাদানগুলি সরান


100

আমার কাছে একটি পিএইচপি অ্যারে রয়েছে যা দেখতে দেখতে এমন কিছু দেখাচ্ছে:

Index              Key     Value
[0]                1       Awaiting for Confirmation
[1]                2       Assigned
[2]                3       In Progress
[3]                4       Completed
[4]                5       Mark As Spam

যখন আমি অ্যারে মানগুলি var_dump করি তখন আমি এটি পাই:

array(5) { [0]=> array(2) { ["key"]=> string(1) "1" ["value"]=> string(25) "Awaiting for Confirmation" } [1]=> array(2) { ["key"]=> string(1) "2" ["value"]=> string(9) "Assigned" } [2]=> array(2) { ["key"]=> string(1) "3" ["value"]=> string(11) "In Progress" } [3]=> array(2) { ["key"]=> string(1) "4" ["value"]=> string(9) "Completed" } [4]=> array(2) { ["key"]=> string(1) "5" ["value"]=> string(12) "Mark As Spam" } }

আমি সম্পূর্ণ এবং সরানো হিসাবে স্প্যাম অপসারণ করতে চাই । আমি জানি আমি পারব unset[$array[3],$array[4]), তবে সমস্যাটি হ'ল কখনও কখনও সূচীর নম্বরটি আলাদা হতে পারে।

কী মানের পরিবর্তে মান নামের সাথে মিলে তাদের সরানোর কোনও উপায় আছে?


আমি এখানে প্রশ্নটি বুঝতে পারি কিনা তা নিশ্চিত নই? আপনার অর্থ কি কখনও কখনও সূচীর নম্বরটি আলাদা হতে পারে?
সাইমন এইচ

উত্তর:


155

আপনার অ্যারেটি বেশ আশ্চর্যজনক: কেন কেবল keyসূচক হিসাবে এবং value... মান হিসাবে ব্যবহার করবেন না ?

আপনার অ্যারেটি এভাবে ঘোষণা করা হলে এটি খুব সহজ হবে না:

$array = array(
    1 => 'Awaiting for Confirmation', 
    2 => 'Asssigned', 
    3 => 'In Progress', 
    4 => 'Completed', 
    5 => 'Mark As Spam', 
);

এটি আপনাকে keyঅ্যারে অ্যাক্সেস করার জন্য সূচী হিসাবে আপনার মানগুলি ব্যবহার করার অনুমতি দেবে ...

এবং আপনি মানগুলি অনুসন্ধান করার জন্য ফাংশনগুলি ব্যবহার করতে সক্ষম হবেন যেমন array_search():

$indexCompleted = array_search('Completed', $array);
unset($array[$indexCompleted]);

$indexSpam = array_search('Mark As Spam', $array);
unset($array[$indexSpam]);

var_dump($array);

আপনার অ্যারের চেয়ে সহজ, না?



পরিবর্তে, আপনার অ্যারের সাথে দেখতে এটি দেখতে:

$array = array(
    array('key' => 1, 'value' => 'Awaiting for Confirmation'), 
    array('key' => 2, 'value' => 'Asssigned'), 
    array('key' => 3, 'value' => 'In Progress'), 
    array('key' => 4, 'value' => 'Completed'), 
    array('key' => 5, 'value' => 'Mark As Spam'), 
);

আপনাকে সমস্ত আইটেম লুপ করতে হবে, বিশ্লেষণ করতে valueএবং সঠিক আইটেমগুলি আনসেট করতে হবে:

foreach ($array as $index => $data) {
    if ($data['value'] == 'Completed' || $data['value'] == 'Mark As Spam') {
        unset($array[$index]);
    }
}
var_dump($array);

সক্ষম-হওয়া সত্ত্বেও, এটি এতটা সহজ নয় ... এবং আমি জোর দিয়েছি: আপনি কি সহজ অ্যারে / মান সিস্টেমের সাথে কাজ করতে, আপনার অ্যারের বিন্যাসটি পরিবর্তন করতে পারবেন না?


"মানটি বিশ্লেষণ করতে আপনাকে সমস্ত আইটেম লুপ করতে হবে"। আপনি যখন অ্যারে_সার্চ ব্যবহার করছেন আপনি সমস্ত আইটেমগুলির মধ্যেও অনুসন্ধান করতে পারেন।
নিকোলাস আওকি

96
  ...

  $array = array(
      1 => 'Awaiting for Confirmation', 
      2 => 'Asssigned', 
      3 => 'In Progress', 
      4 => 'Completed', 
      5 => 'Mark As Spam', 
  );



  return array_values($array);
  ...

4
ধন্যবাদ, আমি কেবল এটি খুঁজছিলাম! :)
রবি ধোরিয়া ツ

4
সুন্দর এবং সহজ . কেবল
ফয়সাল মেহমুদ আওয়ান

এটি সত্য উত্তর, এটি যাচাই করা হয়নি।
শেদ্দীঘি

16
$key = array_search("Mark As Spam", $array);
unset($array[$key]);

2 ডি অ্যারের জন্য ...

$remove = array("Mark As Spam", "Completed");
foreach($arrays as $array){
    foreach($array as $key => $value){
        if(in_array($value, $remove)) unset($array[$key]);
    }
}


3

অ্যারে_ডিফ ব্যবহার করবেন না কেন?

$array = array(
    1 => 'Awaiting for Confirmation', 
    2 => 'Asssigned', 
    3 => 'In Progress', 
    4 => 'Completed', 
    5 => 'Mark As Spam', 
);
$to_delete = array('Completed', 'Mark As Spam');
$array = array_diff($array, $to_delete);

কেবল নোট করুন যে আপনার অ্যারেটি পুনর্নির্মাণ করা হবে।


1

এটা চেষ্টা কর:

$keys = array_keys($array, "Completed");

/ সম্পাদনা জনপ দ্বারা উল্লিখিত হিসাবে, এই পদ্ধতিটি কেবলমাত্র নেস্টেড অ্যারেগুলির জন্যই কাজ করে।


0

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

$temp_array = $list['resultset'][0];

unset($temp_array['badkey1']);
unset($temp_array['badkey2']);

$list['resultset'][0] = $temp_array;

0

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

অ্যারে ধরে নেওয়া মূর্খতাপূর্ণভাবে বড় নয়, আমি অ্যারে_ ফিল্টার ব্যবহার করব। এটি অ্যারের একটি অনুলিপি তৈরি করবে, আপনি মুছে ফেলতে চান এমন রেকর্ডগুলি বিয়োগ করবে যা আপনি মূল অ্যারে ভেরিয়েবলকে পুনরায় নির্ধারণ করতে পারবেন।

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

যাইহোক:

$my_array = array_filter($my_array, 
                         function($el) { 
                            return $el["value"]!="Completed" && $el!["value"]!="Marked as Spam"; 
                         });

আপনি যে এম্বেড থাকা ফাংশনটিতে অন্তর্ভুক্তি যুক্তি (যেমন আপনার আইডি ক্ষেত্র) ব্যবহার করতে পারেন।


-1

একক অ্যারে আইটেম ব্যবহারের জন্য reset($item)


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