একাধিক অ্যারে কী বিদ্যমান কিনা তা পরীক্ষা করে দেখুন


87

আমার বিভিন্ন ধরণের অ্যারে রয়েছে যা এতে অন্তর্ভুক্ত থাকবে

story & message

অথবা শুধুই

story

কোনও অ্যারেতে গল্প এবং বার্তা উভয় রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করব? array_key_exists()অ্যারেতে কেবল সেই একক কীটির সন্ধান করে।

এই কাজ করতে একটি উপায় আছে কি?


4
"গল্প" যদি উভয় ক্ষেত্রেই থাকে তবে মনে হচ্ছে আপনার "বার্তা" খালি পরীক্ষা করা দরকার।
উইজার্ড

4
array_intersect_key()আপনি যে অ্যারে যাচাই করছেন তা যাচাই করতে চান কীগুলির একটি অ্যারের তুলনা করে ব্যবহার করে । যদি আউটপুটটির দৈর্ঘ্য চেক করার জন্য কীগুলির অ্যারের সমতুল্য হয় তবে তারা সবাই উপস্থিত রয়েছে।
মাইকেল বারকোভস্কি

উইজার্ড, আমার কাছে অন্যান্য অ্যারে রয়েছে যা বার্তা ধারণ করে তবে গল্প নয়, তবে তাদের কাছে অন্যান্য কী রয়েছে যা গল্প বা গল্প এবং বার্তা সহ একটি অ্যারে কেবল থাকে। ধন্যবাদ
রায়ান

আপনি কি এখানে কী এবং মানগুলি বিভ্রান্ত করছেন? অ্যারে কি এর মতো ফর্ম্যাট করা হয়েছে ["story & message" => "value"]বা এটির মতো["story & message"]
গর্ডনএম

উত্তর:


72

আপনার কাছে যদি চেক করার জন্য কেবল 2 টি কী থাকে (মূল প্রশ্নের মতো) array_key_exists()তবে কীগুলি বিদ্যমান কিনা তা পরীক্ষা করার জন্য কেবল দু'বার কল করা খুব সহজ ।

if (array_key_exists("story", $arr) && array_key_exists("message", $arr)) {
    // Both keys exist.
}

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

function array_keys_exists(array $keys, array $arr) {
   return !array_diff_key(array_flip($keys), $arr);
}

4
লোকেরা যদি মনে করে যে অ্যারেতে দু'জন সদস্য উপস্থিত রয়েছে কিনা তা পরীক্ষা করার জন্য অন্যান্য সমাধানগুলি আরও ভাল they তারা অবশ্যই স্পষ্ট পাঠযোগ্য কোড বা সম্পাদনা পছন্দ করবেন না :)
অ্যালেক্স

আপনার প্রয়োজনীয় কীগুলি তুলনামূলকভাবে কম হলে এটি সম্ভবত সহজ সমাধান। যদি তারা 20 বা 30 এর মতো কিছু হয় তবে
অপঠনযোগ্য হয়ে উঠবে

4
@apokryfos সম্মত হন, তবে এটি ওপির প্রশ্নের উত্তর দেয় না।
অ্যালেক্স

4
@alex শুধুমাত্র সমস্যাটি হল এই যে যদি $keysরয়েছে এক উপাদান যে নেই$arr এবং অন্য তাতে যে, !array_diff_keyআয় খালি => false( 3v4l উদাহরণ ) ...
CPHPython

4
আমি মনে করি এটি ব্যবহার করে আরও পঠনযোগ্য করে তোলা যেতে পারে !array_diff($keys, array_keys($array));কারণ সেগুলি কার্যকর করার সাথে সামান্য কম জ্ঞানীয় বোঝা জড়িত array_flip
মোপেট

194

এখানে আপনি একটি বৃহত সংখ্যক কীগুলি পরীক্ষা করতে চান এমনকী, এমন একটি সমাধান এখানে স্কেলযোগ্য যা এখানে:

<?php

// The values in this arrays contains the names of the indexes (keys) 
// that should exist in the data array
$required = array('key1', 'key2', 'key3');

$data = array(
    'key1' => 10,
    'key2' => 20,
    'key3' => 30,
    'key4' => 40,
);

if (count(array_intersect_key(array_flip($required), $data)) === count($required)) {
    // All required keys exist!
}

আমি কেন এটি নিম্নোক্ত হয়ে গেল তার কারণটি জানতে চাই .. আফাইক এটি দ্রুত কারণ অ্যারে_ইন্টারসেক্ট_কি সি তে প্রয়োগ করা হয়েছে এবং আপনার কোনও লুপের প্রয়োজন হবে না
এরফান

খুব চতুর প্রকৃতপক্ষে, ভাল কাজ - যদিও পড়া কিছুটা কঠিন।
জন z

ধন্যবাদ :) এটি অদ্ভুত পিএইচপি করার জন্য এটি কোনও বিল্ট-ইন ফাংশন নেই - এটি বেশ সাধারণ। এখানে প্রচুর ব্যবহারকারীর ইনপুট বৈধকরণের ক্লাস রয়েছে যা এটি করে তবে বেশিরভাগ ব্যবহারের ক্ষেত্রে এর ওভারকিল হয়
এরফান

12
চতুর সমাধান প্রকৃতপক্ষে তবে এটি সত্যই ধীর (আমার বাক্সে প্রায় 50% ধীর) একটি সোজাসাপ্টা তুলনায়: `` `$ ঠিক = সত্য; foreach ($ ক্ষেত্র হিসাবে) প্রয়োজনীয়) {যদি (! অ্যারে_কি_এক্সেস্ট ((ক্ষেত্র, $ ডেটা)) $ ঠিক = মিথ্যা; }
ওজে

@ ওজকে এই অ্যারে_কি_এক্সজিস্টগুলি বাদ দিয়ে আইসেটের চেয়ে ধীর
আইআউটেশন

34

আশ্চর্যরূপে array_keys_existকোন অস্তিত্ব নেই ?! অন্তর্বর্তীকালীন যা এই সাধারণ কাজের জন্য একটি একক রেখা প্রকাশ করতে কিছু জায়গা ছেড়ে যায়। আমি শেল স্ক্রিপ্ট বা অন্য কোনও ছোট প্রোগ্রামের কথা ভাবছি।

দ্রষ্টব্য: নীচের প্রতিটি সমাধান […]পিএইচপি 5.4+ এ উপলব্ধ সংক্ষিপ্ত অ্যারে ডিক্লেয়ারেশন সিনট্যাক্স ব্যবহার করে

অ্যারে_ডিফ + অ্যারে_কিগুলি

if (0 === count(array_diff(['story', 'message', '…'], array_keys($source)))) {
  // all keys found
} else {
  // not all
}

( কিম স্ট্যাক্সের টুপি টিপস )

এই পন্থাটি আমি খুঁজে পেয়েছি সবচেয়ে সংক্ষিপ্ত। array_diff()আর্গুমেন্ট 2 এ উপস্থিত নয় 1 টি আর্গুমেন্টে উপস্থিত আইটেমির অ্যারে প্রদান করে । সুতরাং একটি খালি অ্যারে নির্দেশ করে যে সমস্ত কীগুলি পাওয়া গেছে। পিএইচপি 5.5 এ আপনি সরল হতে সহজ 0 === count(…)করতে পারেন empty(…)

অ্যারে_ড্রেস + আনসেট করুন

if (0 === count(array_reduce(array_keys($source), 
    function($in, $key){ unset($in[array_search($key, $in)]); return $in; }, 
    ['story', 'message', '…'])))
{
  // all keys found
} else {
  // not all
}

পড়া সহজ, পরিবর্তন সহজ। array_reduce()একটি মান পৌঁছানোর জন্য একটি অ্যারের উপরে পুনরাবৃত্তি করতে একটি কলব্যাক ব্যবহার করে। কীগুলি খাওয়ানোর মাধ্যমে আমরা উত্সটিতে থাকা কীগুলি মুছে ফেলার সাথে তার $initialমানটি আগ্রহী $inএবং তারপরে আমরা সমস্ত কীগুলি পাওয়া গেলে 0 টি উপাদান দিয়ে শেষের আশা করতে পারি।

আমরা যে চাবিগুলি আগ্রহী তা নীচের লাইনে সুন্দরভাবে ফিট করার কারণে নির্মাণটি পরিবর্তন করা সহজ।

অ্যারে_ ফিল্টার এবং ইন_আরে

if (2 === count(array_filter(array_keys($source), function($key) { 
        return in_array($key, ['story', 'message']); }
    )))
{
  // all keys found
} else {
  // not all
}

array_reduceসমাধানের চেয়ে লেখার চেয়ে সহজ তবে সম্পাদনা করা কিছুটা জটিল। array_filterএটি একটি পুনরাবৃত্তি কলব্যাক যা আপনাকে কলব্যাকের ক্ষেত্রে সত্য (নতুন অ্যারেতে অনুলিপি করুন) বা মিথ্যা (অনুলিপি না করে) একটি ফিল্টার করা অ্যারে তৈরি করতে দেয়। গোটেচ্যা হ'ল 2আপনার প্রত্যাশা করা আইটেমের সংখ্যায় অবশ্যই পরিবর্তন করতে হবে ।

এটি আরও টেকসই তৈরি করা যেতে পারে তবে শিষ্টাচারের পাঠযোগ্যতার উপর রয়েছে:

$find = ['story', 'message'];
if (count($find) === count(array_filter(array_keys($source), function($key) use ($find) { return in_array($key, $find); })))
{
  // all keys found
} else {
  // not all
}

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

16

আমার কাছে মনে হয়, সবচেয়ে সহজ পদ্ধতিটি হ'ল এটি:

$required = array('a','b','c','d');

$values = array(
    'a' => '1',
    'b' => '2'
);

$missing = array_diff_key(array_flip($required), $values);

মুদ্রণ:

Array(
    [c] => 2
    [d] => 3
)

এটি কোন কীগুলি হুবহু হারিয়েছে তা যাচাই করার অনুমতি দেয়। এটি ত্রুটি পরিচালনার জন্য কার্যকর হতে পারে।


আমি এখানে এসেছি!
eNeMetcH

9

আরও একটি সম্ভাব্য সমাধান:

if (!array_diff(['story', 'message'], array_keys($array))) {
    // OK: all the keys are in $array
} else {
   // FAIL: some keys are not
}

7

উপরের সমাধানগুলি চতুর, তবে খুব ধীর। ইসসেট সহ একটি সরল ফোরচ লুপ array_intersect_keyসমাধানের চেয়ে দ্বিগুণ বেশি fast

function array_keys_exist($keys, $array){
    foreach($keys as $key){
        if(!array_key_exists($key, $array))return false;
    }
    return true;
}

(1000000 পুনরাবৃত্তির জন্য 344ms বনাম 768 মিমি)


['কী' => নাল] এবং কখনও কখনও নাল মান সহ আপনার অ্যারে থাকলে আইসেটটি মিথ্যা প্রত্যাবর্তন করবে। পরিবর্তে আপনারকে অ্যারে_কি_এক্সেস্ট ব্যবহার করা উচিত
j4r3k

অকাল ফিরে আসার কারণে আমাকে এই ক্ষেত্রে বিপরীতটি ব্যবহার করতে হয়েছিল false( এক্ষেত্রে falseওভাররাইড true)। সুতরাং, আমার চাহিদাগুলি যা কাজ করে তা হ'ল foreach ($keys as $key) { if (array_key_exists($key, $array)) { return true; }} return false;আমার প্রয়োজনগুলি যদি anyএকটি অ্যারেতে কী উপস্থিত থাকে অন্য অ্যারেতে ...
জেফ

4
আমি এক মিলিয়ন কীগুলিকে "খুব ধীর" বলে +/- 400ms কল করব না, তবে আমি কেবল মানুষ!
কর্নেল ক্লিক ক্লিক করুন

3

আপনার যদি এরকম কিছু থাকে:

$stuff = array();
$stuff[0] = array('story' => 'A story', 'message' => 'in a bottle');
$stuff[1] = array('story' => 'Foo');

আপনি কেবল count():

foreach ($stuff as $value) {
  if (count($value) == 2) {
    // story and message
  } else {
    // only story
  }
}

এটি কেবলমাত্র তখনই কাজ করে যদি আপনি নিশ্চিত হন যে কেবলমাত্র আপনার কাছে এই অ্যারে কী রয়েছে এবং অন্য কিছু নেই।

অ্যারে_কি_এক্সিস্টগুলি () ব্যবহার করে কেবল একবারে একটি কী পরীক্ষা করা সমর্থন করে, তাই আপনাকে উভয়কে আলাদা করে পরীক্ষা করতে হবে:

foreach ($stuff as $value) {
  if (array_key_exists('story', $value) && array_key_exists('message', $value) {
    // story and message
  } else {
    // either one or both keys missing
  }
}

array_key_exists()কীটি অ্যারেতে উপস্থিত থাকলে সত্যটি ফিরে আসে, তবে এটি একটি আসল ফাংশন এবং টাইপ করার মতো অনেক কিছুই। ভাষা নির্মান isset()প্রায় একই কাজ করবে, যদি পরীক্ষিত মানটি NULL হয় তবে:

foreach ($stuff as $value) {
  if (isset($value['story']) && isset($value['message']) {
    // story and message
  } else {
    // either one or both keys missing
  }
}

অতিরিক্তভাবে আইসেট একসাথে একাধিক ভেরিয়েবল চেক করতে দেয়:

foreach ($stuff as $value) {
  if (isset($value['story'], $value['message']) {
    // story and message
  } else {
    // either one or both keys missing
  }
}

এখন সেট করা স্টাফের জন্য পরীক্ষাটি অনুকূলিত করতে, আপনি এই "যদি" আরও ভাল ব্যবহার করতে চান:

foreach ($stuff as $value) {
  if (isset($value['story']) {
    if (isset($value['message']) {
      // story and message
    } else {
      // only story
    }
  } else {
    // No story - but message not checked
  }
}

3

এই সম্পর্কে কি:

isset($arr['key1'], $arr['key2']) 

উভয়ই নাল না হলে কেবল সত্যটি প্রত্যাবর্তন করুন

যদি নাল হয় তবে কীটি অ্যারেতে নেই


4
যদি মানটি হয় $arr['key1']বা $arr['key2']হয় nullতবে কোডটি থাকবে, কীটি এখনও বিদ্যমান।
Xorifelse

আমি একটি পরীক্ষা লিখেছি দয়া করে এটি দেখুন @ জরিফালিজ পরীক্ষা এবং আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন। এফওয়াইআই: সেই সময় আমি কেবল পিএইচপি 5.6. * সংস্করণ জানতাম তাই আমি কেবল এটির জন্যই করেছি।
ডেভিড ডুটকভস্কি

কোডটি কী সম্পাদন করার চেষ্টা করছে? আপনি কেবল একটি foreachলুপ ব্যবহার করছেন না কেন ?
Xorifelse

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

3

আমি প্রায়শই এই জাতীয় কিছু ব্যবহার করি

$wantedKeys = ['story', 'message'];
$hasWantedKeys = count(array_intersect(array_keys($source), $wantedKeys)) > 0

বা চাওয়া চাবিগুলির জন্য মানগুলি সন্ধান করতে

$wantedValues = array_intersect_key($source, array_fill_keys($wantedKeys, 1))

2

এটা চেষ্টা কর

$required=['a','b'];$data=['a'=>1,'b'=>2];
if(count(array_intersect($required,array_keys($data))>0){
    //a key or all keys in required exist in data
 }else{
    //no keys found
  }

1

এই ক্লাসটি আমি নিজের জন্য ক্লাসের মধ্যে ব্যবহার করার জন্য লিখেছিলাম।

<?php
/**
 * Check the keys of an array against a list of values. Returns true if all values in the list
 is not in the array as a key. Returns false otherwise.
 *
 * @param $array Associative array with keys and values
 * @param $mustHaveKeys Array whose values contain the keys that MUST exist in $array
 * @param &$missingKeys Array. Pass by reference. An array of the missing keys in $array as string values.
 * @return Boolean. Return true only if all the values in $mustHaveKeys appear in $array as keys.
 */
    function checkIfKeysExist($array, $mustHaveKeys, &$missingKeys = array()) {
        // extract the keys of $array as an array
        $keys = array_keys($array);
        // ensure the keys we look for are unique
        $mustHaveKeys = array_unique($mustHaveKeys);
        // $missingKeys = $mustHaveKeys - $keys
        // we expect $missingKeys to be empty if all goes well
        $missingKeys = array_diff($mustHaveKeys, $keys);
        return empty($missingKeys);
    }


$arrayHasStoryAsKey = array('story' => 'some value', 'some other key' => 'some other value');
$arrayHasMessageAsKey = array('message' => 'some value', 'some other key' => 'some other value');
$arrayHasStoryMessageAsKey = array('story' => 'some value', 'message' => 'some value','some other key' => 'some other value');
$arrayHasNone = array('xxx' => 'some value', 'some other key' => 'some other value');

$keys = array('story', 'message');
if (checkIfKeysExist($arrayHasStoryAsKey, $keys)) { // return false
    echo "arrayHasStoryAsKey has all the keys<br />";
} else {
    echo "arrayHasStoryAsKey does NOT have all the keys<br />";
}

if (checkIfKeysExist($arrayHasMessageAsKey, $keys)) { // return false
    echo "arrayHasMessageAsKey has all the keys<br />";
} else {
    echo "arrayHasMessageAsKey does NOT have all the keys<br />";
}

if (checkIfKeysExist($arrayHasStoryMessageAsKey, $keys)) { // return false
    echo "arrayHasStoryMessageAsKey has all the keys<br />";
} else {
    echo "arrayHasStoryMessageAsKey does NOT have all the keys<br />";
}

if (checkIfKeysExist($arrayHasNone, $keys)) { // return false
    echo "arrayHasNone has all the keys<br />";
} else {
    echo "arrayHasNone does NOT have all the keys<br />";
}

আমি ধরে নিচ্ছি যে আপনাকে অ্যারেতে একাধিক কীগুলি সমস্ত উপস্থিত থাকতে হবে check আপনি যদি কমপক্ষে একটি কীটির কোনও মিল খুঁজছেন তবে আমাকে জানান যাতে আমি অন্য ফাংশন সরবরাহ করতে পারি।

কোডেপ্যাড এখানে http://codepad.viper-7.com/AKVPCH


4
সমাধানটি ঠিক আছে তবে একটি দুর্দান্ত এক-লাইন মণি সমাহিত হয়েছে:if (0 === count(array_diff(['key1','key2','key3'], array_keys($lookIn)))) { // all keys exist } else { // nope }
মার্ক ফক্স

আপনি যা লিখছেন তা সত্য। আমি আমার ফাংশনটি ভার্বোস হলেও বেশি পঠনযোগ্য বলে মনে করি। অবশ্যই, আমি ভুল হতে পারে। আমার উত্তর মন্তব্য করার জন্য ধন্যবাদ। আমি নতুন কিছু শিখি
কিম স্ট্যাকস

1

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

function array_keys_exist($searchForKeys = array(), $inArray = array()) {
    $inArrayKeys = array_keys($inArray);
    return count(array_intersect($searchForKeys, $inArrayKeys)) == count($searchForKeys); 
}

1

এটি পুরানো এবং সম্ভবত কবর দেওয়া হবে, তবে এটি আমার চেষ্টা।

আমার কাছে @ রায়ান এর মত একটি সমস্যা ছিল। কিছু ক্ষেত্রে আমার কমপক্ষে 1 টি কী অ্যারেতে ছিল কিনা তা কেবলমাত্র খতিয়ে দেখার দরকার ছিল এবং কিছু ক্ষেত্রে সমস্ত উপস্থিত থাকার প্রয়োজন ছিল

সুতরাং আমি এই ফাংশনটি লিখেছি:

/**
 * A key check of an array of keys
 * @param array $keys_to_check An array of keys to check
 * @param array $array_to_check The array to check against
 * @param bool $strict Checks that all $keys_to_check are in $array_to_check | Default: false
 * @return bool
 */
function array_keys_exist(array $keys_to_check, array $array_to_check, $strict = false) {
    // Results to pass back //
    $results = false;

    // If all keys are expected //
    if ($strict) {
        // Strict check //

        // Keys to check count //
        $ktc = count($keys_to_check);
        // Array to check count //
        $atc = count(array_intersect($keys_to_check, array_keys($array_to_check)));

        // Compare all //
        if ($ktc === $atc) {
            $results = true;
        }
    } else {
        // Loose check - to see if some keys exist //

        // Loop through all keys to check //
        foreach ($keys_to_check as $ktc) {
            // Check if key exists in array to check //
            if (array_key_exists($ktc, $array_to_check)) {
                $results = true;
                // We found at least one, break loop //
                break;
            }
        }
    }

    return $results;
}

একাধিক ||এবং &&ব্লক লেখার চেয়ে এটি অনেক সহজ ছিল ।


0

এটি কি কাজ করে না?

array_key_exists('story', $myarray) && array_key_exists('message', $myarray)

4
ধ্রুবক অ্যারে হতে পারে না ... :)
সেভেন

আমি সর্বদা ভুলে যাই my যখন আমার সুপার কোড চেক স্বতঃপূরণ আইডিইতে না লিখি। =)
কিউই

0
<?php

function check_keys_exists($keys_str = "", $arr = array()){
    $return = false;
    if($keys_str != "" and !empty($arr)){
        $keys = explode(',', $keys_str);
        if(!empty($keys)){
            foreach($keys as $key){
                $return = array_key_exists($key, $arr);
                if($return == false){
                    break;
                }
            }
        }
    }
    return $return;
}

// ডেমো চালান

$key = 'a,b,c';
$array = array('a'=>'aaaa','b'=>'ccc','c'=>'eeeee');

var_dump( check_keys_exists($key, $array));

0

আমি নিশ্চিত নই, এটি যদি খারাপ ধারণা হয় তবে আমি একাধিক অ্যারে কীটি পরীক্ষা করতে খুব সাধারণ ফোরচ লুপ ব্যবহার করি।

// get post attachment source url
$image     = wp_get_attachment_image_src(get_post_thumbnail_id($post_id), 'single-post-thumbnail');
// read exif data
$tech_info = exif_read_data($image[0]);

// set require keys
$keys = array('Make', 'Model');

// run loop to add post metas foreach key
foreach ($keys as $key => $value)
{
    if (array_key_exists($value, $tech_info))
    {
        // add/update post meta
        update_post_meta($post_id, MPC_PREFIX . $value, $tech_info[$value]);
    }
} 

0
// sample data
$requiredKeys = ['key1', 'key2', 'key3'];
$arrayToValidate = ['key1' => 1, 'key2' => 2, 'key3' => 3];

function keysExist(array $requiredKeys, array $arrayToValidate) {
    if ($requiredKeys === array_keys($arrayToValidate)) {
        return true;
    }

    return false;
}

0
$myArray = array('key1' => '', 'key2' => '');
$keys = array('key1', 'key2', 'key3');
$keyExists = count(array_intersect($keys, array_keys($myArray)));

সত্য ফিরে আসবে, কারণ $ myArray এ $ কী অ্যারে থেকে কীগুলি রয়েছে


0

এটি হিসাবে ব্যবহার করা যেতে পারে কিছু

//Say given this array
$array_in_use2 = ['hay' => 'come', 'message' => 'no', 'story' => 'yes'];
//This gives either true or false if story and message is there
count(array_intersect(['story', 'message'], array_keys($array_in_use2))) === 2;

2 এর বিপরীতে চেকটি নোট করুন, আপনি যে মানগুলি অনুসন্ধান করতে চান তা যদি আলাদা হয় তবে আপনি পরিবর্তন করতে পারেন।

এই সমাধানটি দক্ষ নাও হতে পারে, তবে এটি কার্যকর হয়!

আপডেট

একটি ফ্যাট ফাংশনে:

 /**
 * Like php array_key_exists, this instead search if (one or more) keys exists in the array
 * @param array $needles - keys to look for in the array
 * @param array $haystack - the <b>Associative</b> array to search
 * @param bool $all - [Optional] if false then checks if some keys are found
 * @return bool true if the needles are found else false. <br>
 * Note: if hastack is multidimentional only the first layer is checked<br>,
 * the needles should <b>not be<b> an associative array else it returns false<br>
 * The array to search must be associative array too else false may be returned
 */
function array_keys_exists($needles, $haystack, $all = true)
{
    $size = count($needles);
    if($all) return count(array_intersect($needles, array_keys($haystack))) === $size;
    return !empty(array_intersect($needles, array_keys($haystack)));

}

সুতরাং এটির সাথে উদাহরণস্বরূপ:

$array_in_use2 = ['hay' => 'come', 'message' => 'no', 'story' => 'yes'];
//One of them exists --> true
$one_or_more_exists = array_keys_exists(['story', 'message'], $array_in_use2, false);
//all of them exists --> true
$all_exists = array_keys_exists(['story', 'message'], $array_in_use2);

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


0

আমি আমার পোস্টটি যাচাই করার জন্য সাধারণত একটি ফাংশন ব্যবহার করি এবং এটি এই প্রশ্নেরও উত্তর, সুতরাং আমাকে এটি পোস্ট করতে দিন।

আমার ফাংশনটি কল করতে আমি 2 টি অ্যারের ব্যবহার করব

validatePost(['username', 'password', 'any other field'], $_POST))

তারপরে আমার ফাংশনটি এটির মতো দেখাবে

 function validatePost($requiredFields, $post)
    {
        $validation = [];

        foreach($requiredFields as $required => $key)
        {
            if(!array_key_exists($key, $post))
            {
                $validation['required'][] = $key;
            }
        }

        return $validation;
    }

এটি এই আউটপুট হবে

"প্রয়োজনীয়": ["ব্যবহারকারীর নাম", "পাসওয়ার্ড", "অন্য কোনও ক্ষেত্র"]

সুতরাং এই ফাংশনটি যা করে তা বৈধতাযুক্ত এবং পোস্টের অনুরোধের সমস্ত অনুপস্থিত ক্ষেত্রগুলি ফিরিয়ে দেয়।


0
    $colsRequired   = ["apple", "orange", "banana", "grapes"];
    $data           = ["apple"=>"some text", "orange"=>"some text"];
    $presentInBoth  = array_intersect($colsRequired,array_keys($data));

    if( count($presentInBoth) != count($colsRequired))
        echo "Missing keys  :" . join(",",array_diff($colsRequired,$presentInBoth));
    else
        echo "All Required cols are present";

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