in_array একাধিক মান


110

আমি কীভাবে একাধিক মান পরীক্ষা করতে পারি:

$arg = array('foo','bar');

if(in_array('foo','bar',$arg))

এটি একটি উদাহরণ যাতে আপনি কিছুটা ভাল বুঝতে পারেন, আমি জানি এটি কাজ করবে না।

উত্তর:


200

খড়ের খড়ি দিয়ে লক্ষ্যগুলি ছেদ করুন এবং নিশ্চিত করুন যে ছেদটি লক্ষ্যবস্তুগুলির সাথে যথাযথভাবে সমান:

$haystack = array(...);

$target = array('foo', 'bar');

if(count(array_intersect($haystack, $target)) == count($target)){
    // all of $target is in $haystack
}

মনে রাখবেন আপনি শুধুমাত্র ফলে ছেদ আকার যাচাই করতে হবে লক্ষ্য মূল্যবোধের অ্যারে বলতে যে একই আকার $haystackএকটি সুপারসেটও হয় $target

যে অন্তত একটি মান যাচাই করতে $targetরয়েছেন $haystack, আপনি এই চেক করতে পারেন:

 if(count(array_intersect($haystack, $target)) > 0){
     // at least one of $target is in $haystack
 }

13
এই সমাধানটি সেরা নয়: les সূঁচ = অ্যারে (1,2); $ খড়ের গাদা = অ্যারের (1,1,2,3); রিটার্ন (গণনা (অ্যারে_ইন্টারসেক্ট ($ খড়ের ছাঁচ, $ সূঁচ))) == গণনা ($ সূঁচ)); এটি মিথ্যা ফিরে আসবে, এটি ভাল নয়। রোক ক্রালজের সমাধান এই ক্ষেত্রে ভাল।
ihtus

1
আমি মনে করি
হাসান কাঞ্চনা

182

বিকাশকারী হিসাবে আপনার সম্ভবত সেট অপারেশন (পার্থক্য, ইউনিয়ন, ছেদ) শিখতে হবে। আপনি আপনার অ্যারেটিকে "সেট" হিসাবে এবং অন্যটি কীগুলির জন্য অনুসন্ধান করছেন তা কল্পনা করতে পারেন।

সমস্ত সূঁচ আছে কিনা তা পরীক্ষা করুন

function in_array_all($needles, $haystack) {
   return empty(array_diff($needles, $haystack));
}

echo in_array_all( [3,2,5], [5,8,3,1,2] ); // true, all 3, 2, 5 present
echo in_array_all( [3,2,5,9], [5,8,3,1,2] ); // false, since 9 is not present

সূঁচগুলির কোনও উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন

function in_array_any($needles, $haystack) {
   return !empty(array_intersect($needles, $haystack));
}

echo in_array_any( [3,9], [5,8,3,1,2] ); // true, since 3 is present
echo in_array_any( [4,9], [5,8,3,1,2] ); // false, neither 4 nor 9 is present

8
দ্রষ্টব্য: এই ধরণের অ্যারে
ডিক্লোরেশনটি

দুর্দান্ত সমাধান প্রদান করা আপনার কঠোর তুলনা করার দরকার নেই।
অবাক হয়ে

14
if(in_array('foo',$arg) && in_array('bar',$arg)){
    //both of them are in $arg
}

if(in_array('foo',$arg) || in_array('bar',$arg)){
    //at least one of them are in $arg
}

7

খড়ের কাঁটাতে সূঁচের কোনও উপস্থিতি আছে কিনা তা পরীক্ষা করতে @ রোক ক্রালজ জবাব (সেরা আইএমও) বন্ধ করে দেওয়া উচিত, কোডের পর্যালোচনা চলাকালীন কখনও কখনও বিভ্রান্তিকর হতে পারে তার (bool)পরিবর্তে আপনি ব্যবহার করতে পারেন !!

function in_array_any($needles, $haystack) {
   return (bool)array_intersect($needles, $haystack);
}

echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present
echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present

https://glot.io/snippets/f7dhw4kmju


9
নতুন উত্তর হিসাবে রকের উত্তরের মন্তব্য হিসাবে এটি আরও কার্যকর হবে।
অবাস্তব

@ জায়মিন কীভাবে এটি (আপনি জিরো বিশদ সরবরাহ করেছেন) ... আমার জন্য পুরোপুরি ঠিকঠাক
সিমাইলস

@ এস স্টাইলগুলি আমি পূর্ণসংখ্যার পরিবর্তে অ্যারেতে স্ট্রিংয়ের মান ব্যবহার করার চেষ্টা করেছি। আপনি আপনার পক্ষ থেকে একবার চেষ্টা করতে পারেন এবং আমাকে জানান।
জয়মিন

@ জয়মিন এখনও সমস্যা আছে না glot.io/snippets/f7dhw4kmju
এসমাইলস

এই bool, যেহেতু রূপান্তর এখানে উপযুক্ত নয় array_intersect একটি অ্যারের যা খালি থাকা অথবা খালি নয় এমন হতে পারে ফেরৎ। @ রোক-ক্রলজ সলিউশনটি কেবলমাত্র পছন্দসই।
কোডার্নারার

3

এই সমস্যাটির জন্য আইএমএইচও মার্ক ইলিয়ট এর সমাধান সেরা best যদি আপনাকে অ্যারে উপাদানগুলির মধ্যে আরও জটিল তুলনা অপারেশন করতে হয় এবং আপনি পিএইচপি 5.3 এ থাকেন তবে আপনি নীচের মতো কিছু সম্পর্কেও ভাবতে পারেন:

<?php

// First Array To Compare
$a1 = array('foo','bar','c');

// Target Array
$b1 = array('foo','bar');


// Evaluation Function - we pass guard and target array
$b=true;
$test = function($x) use (&$b, $b1) {
        if (!in_array($x,$b1)) {
                $b=false;
        }
};


// Actual Test on array (can be repeated with others, but guard 
// needs to be initialized again, due to by reference assignment above)
array_walk($a1, $test);
var_dump($b);

এটি একটি বন্ধের উপর নির্ভর করে; তুলনা ফাংশন অনেক বেশি শক্তিশালী হতে পারে। শুভকামনা!


চূড়ান্ত আউটপুটটিতে আমি কীভাবে ইতিমধ্যে সমস্ত কিছু করেছি তা আমি বদলেছি আমার এটি কোনওভাবেই করার দরকার নেই, যদিও এটি শিখতে সবসময় ভাল, আপনার ইনপুট এবং আপনার সময়ের জন্য ধন্যবাদ!
ড্যারিল

2
if(empty(array_intersect([21,22,23,24], $check_with_this)) {
 print "Not found even a single element";
} else {
 print "Found an element";
}

অ্যারে_ইন্টারসেক্ট () অ্যারে 1 এর সমস্ত মানগুলি যুক্ত করে যা সমস্ত আর্গুমেন্টে উপস্থিত রয়েছে returns মনে রাখবেন কীগুলি সংরক্ষিত আছে।

অ্যারে 1 এর মানগুলিতে সমস্ত অ্যারে যুক্ত একটি অ্যারে প্রদান করে যার মানগুলি সমস্ত পরামিতিতে বিদ্যমান in


খালি () - কোনও ভেরিয়েবল খালি কিনা তা নির্ধারণ করুন

ভের উপস্থিত থাকলে FALSE প্রদান করে এবং শূন্য-শূন্য, মানহীন মান রয়েছে। অন্যথায় সত্য প্রদান করে।

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