php - পিএইচপি ফাংশন




পিএইচপি অ্যারে মান দ্বারা মুছে দিন(কী না) (17)

@ ব্লগজেলস উত্তর আমাকে সাহায্য করেছে। ধন্যবাদ.

আমার ক্ষেত্রে, অ্যারে সহযোগী হতে পারে না, তাই আমি এই ফাংশন যোগ করা

function test($value, $tab) {

 if(($key = array_search($value, $tab)) !== false) {
    unset($tab[$key]); return true;

 } else if (array_key_exists($value, $tab)){
        unset($tab[$value]); return true;

 } else {
    return false; // the $value is not in the array $tab
 }

}

শুভেচ্ছা সহ

নিম্নরূপ আমি একটি পিএইচপি অ্যারে আছে:

$messages = [312, 401, 1599, 3, ...];

আমি $del_val মান ধারণকারী উপাদানটি মুছে ফেলতে চাই (উদাহরণস্বরূপ, $del_val=401 ), কিন্তু আমি তার কী জানি না। এটি সাহায্য করতে পারে: প্রতিটি মান শুধুমাত্র একবার হতে পারে

আমি এই কাজটি সম্পাদন করার জন্য সহজতম ফাংশন খুঁজছেন।


UnderscoreJS _.reject যুক্তি যুক্তি এবং দুই ফাংশন তৈরি (মানুষ ফাংশন পছন্দ !!)

array_reject_value: এই ফাংশনটি কেবল নির্দিষ্ট মানটি প্রত্যাখ্যান করছে (পিএইচপি 4,5,7 এর জন্যও কাজ করে)

function array_reject_value(array &$arrayToFilter, $deleteValue) {
    $filteredArray = array();

    foreach ($arrayToFilter as $key => $value) {
        if ($value !== $deleteValue) {
            $filteredArray[] = $value;
        }
    }

    return $filteredArray;
}

array_reject: এই ফাংশনটি কেবল কলযোগ্য পদ্ধতি প্রত্যাখ্যান করছে (পিএইচপি> = 5.3 এর জন্য কাজ করে)

function array_reject(array &$arrayToFilter, callable $rejectCallback) {

    $filteredArray = array();

    foreach ($arrayToFilter as $key => $value) {
        if (!$rejectCallback($value, $key)) {
            $filteredArray[] = $value;
        }
    }

    return $filteredArray;
}

সুতরাং আমাদের বর্তমান উদাহরণে আমরা নিম্নোক্ত ফাংশনগুলি নিম্নরূপ ব্যবহার করতে পারি:

$messages = [312, 401, 1599, 3, 6];
$messages = array_reject_value($messages, 401);

বা এমনকি আরও ভাল: (এটি array_filter মত ব্যবহার করার জন্য একটি উন্নত সিনট্যাক্স দেয়)

$messages = [312, 401, 1599, 3, 6];
$messages = array_reject($messages, function ($value) {
    return $value === 401;
});

উপরোক্ত আরো জটিল জিনিসগুলির জন্য উপরে ব্যবহার করা যেতে পারে যেমন ধরুন আমরা 401 এর চেয়ে বড় বা সমান সমান মূল্যগুলি সরাতে চাই, আমরা কেবল এটি করতে পারি:

$messages = [312, 401, 1599, 3, 6];
$greaterOrEqualThan = 401;
$messages = array_reject($messages, function ($value) use $greaterOrEqualThan {
    return $value >= $greaterOrEqualThan;
});

অথবা সহজভাবে, ম্যানুয়াল উপায়:

foreach ($array as $key => $value){
    if ($value == $target_value) {
        unset($array[$key]);
    }
}

এটি তাদের সবচেয়ে নিরাপদ কারণ আপনার অ্যারেতে আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে


আচ্ছা, অ্যারে থেকে একটি উপাদান মুছে ফেলা মূলত শুধুমাত্র একটি উপাদান সঙ্গে পার্থক্য সেট।

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

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

Disclaimer: মনে রাখবেন যে আমার সমাধান অ্যারের একটি নতুন অনুলিপি তৈরি করে যখন পুরানোটিকে অক্ষরযুক্ত উত্তরের বিপরীতে বিপরীত করে রাখে। এটা এই কারণে একটি বিট ধীর হতে পারে।


আপনি করতে পারেন:

unset($messages[array_flip($messages)['401']]);

ব্যাখ্যা: অ্যারে ফ্লিপ করার পরে কী 401 কী উপাদানটি মুছুন।


আপনি যদি আপনার মানগুলি মুছতে চান তবে অ্যারে থাকা বা করতে পারেন। Array_diff ফাংশন ব্যবহার করুন। এই মত জিনিস জন্য মহান কাজ বলে মনে হয়।

array_diff

$arrayWithValuesRemoved = array_diff($arrayOfData, $arrayOfValuesToRemove);

একক মাছ ধরার কোড ( array_diff() ) ধন্যবাদ, নিম্নলিখিত ব্যবহার করুন:

$messages = array_diff($messages, array(401));

একটি অ্যারের একটি মান মুছে ফেলার আরেকটি ধারণা, array_diff ব্যবহার করুন। আমি যদি চাই

$my_array = array(1=>"a", "second_value"=>"b", 3=>"c", "d");
$new_array_without_value_c = array_diff($my_array, array("c"));

(ডক: http://php.net/manual/fr/function.array-diff.php )


একাধিক মান মুছে ফেলতে এই চেষ্টা করুন

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

গ্রহনযোগ্য উত্তরটি অ্যারেকে অ্যাসোসিয়েটেভ অ্যারে রূপান্তর করে, তাই, যদি আপনি এটি গ্রহণযোগ্য উত্তর সহ অ-অ্যাসোসিয়েটেট অ্যারে হিসাবে রাখতে চান তবে আপনাকে array_values ব্যবহার করতে হতে পারে।

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

রেফারেন্স here


নিম্নলিখিত কোড একটি বর্ণন আছে:

$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');

আপনি করতে পারেন:

$arr = array_diff($arr, array('remove_me', 'remove_me_also'));

এবং যে আপনি এই অ্যারে পাবেন:

array('nice_item', 'another_liked_item')

নিম্নলিখিত কোড দ্বারা, পুনরাবৃত্তি মান $ বার্তা থেকে মুছে ফেলা হবে।

$messages = array_diff($messages, array(401));


যদি আপনার কাছে> php5.3 আছে, একটি লাইন কোড আছে:

$array = array_filter($array, function($i) use ($value){return $i != $value;}); 

যদি আপনি এটির কী না জানেন তবে এটি কোন ব্যাপার নয়।

আপনি মূল হিসাবে মানটি স্থাপন করতে পারেন, এর অর্থ এটি তাত্ক্ষণিকভাবে মানটি খুঁজে পাবে। আবার ওভার সব উপাদান অনুসন্ধান ব্যবহার করার চেয়ে ভাল।

$messages=array();   
$messages[312] = 312;    
$messages[401] = 401;   
$messages[1599] = 1599;   
$messages[3] = 3;    

unset($messages[3]); // no search needed

array_search() এবং unset ব্যবহার করে নিম্নলিখিত চেষ্টা করুন:

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

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

array_search() একটি মান প্রদান করে কিনা তা if() বিবৃতিটি পরীক্ষা করবে, এবং এটি যদি শুধুমাত্র একটি ক্রিয়া সম্পাদন করবে।



$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);




arrays