php - w3schools - মান দ্বারা পিএইচপি বহুমাত্রিক অ্যারে অনুসন্ধান




php wiki (14)

আমি একটি অ্যারে আছে যেখানে আমি uid অনুসন্ধান এবং অ্যারের কী পেতে চান।

উদাহরণ

অনুমান করুন আমরা নিম্নলিখিত 2-মাত্রিক অ্যারে আছে:

$userdb = array(
    array(
        'uid' => '100',
        'name' => 'Sandra Shush',
        'pic_square' => 'urlof100'
    ),
    array(
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    ),
    array(
        'uid' => '40489',
        'name' => 'Michael',
        'pic_square' => 'urlof40489'
    )
);

ফাংশন কল search_by_uid(100) (প্রথম ব্যবহারকারীর uid) 0 ফেরত দিতে হবে।

ফাংশন কল search_by_uid(40489) 2 ফেরত দিতে হবে।

আমি loops তৈরীর চেষ্টা, কিন্তু আমি একটি দ্রুত মৃত্যুদন্ড কোড চাই।


@Mayhem তৈরি করা ফাংশনে প্রসারিত হলে, এই উদাহরণটি শুধুমাত্র "ফিজি" অনুসন্ধানের ক্ষেত্রে আরও বেশি হবে যদি আপনি অনুসন্ধান স্ট্রিংটির অংশ ( সর্বাধিক ) মিলতে চান:

 function searchArrayKeyVal($sKey, $id, $array) {
    foreach ($array as $key => $val) {
        if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false) {
            return $key;
        }
    }
         return false;
 }

উদাহরণস্বরূপ অ্যারের মানটি নিউ ইয়র্কে স্বাগতম! এবং আপনি শুধু "নিউ ইয়র্ক" এর প্রথম উদাহরণ চেয়েছিলেন!


আপনি এই ফাংশন ব্যবহার করতে পারেন; https://github.com/serhatozles/ArrayAdvancedSearch

<?php 
include('ArraySearch.php');

$query = "a='Example World' and b>='2'";

$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);

$Result = ArraySearch($Array,$query,1);

echo '<pre>';
print_r($Result);
echo '</pre>'; 

// Output:
// Array
// (
//    [0] => Array
//        (
//            [a] => Example World
//            [b] => 2
//        )
//
// )

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

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

এছাড়াও, আমার ক্ষেত্রে অনন্য হতে পারে না এমন অন্যান্য ক্ষেত্রগুলি অনুসন্ধানের ফলাফল হিসাবে ফিরে যাওয়ার জন্য একাধিক কী থাকতে পারে।

 /**
     * @param array multidimensional 
     * @param string value to search for, ie a specific field name like name_first
     * @param string associative key to find it in, ie field_name
     * 
     * @return array keys.
     */
     function search_revisions($dataArray, $search_value, $key_to_search) {
        // This function will search the revisions for a certain value
        // related to the associative key you are looking for.
        $keys = array();
        foreach ($dataArray as $key => $cur_value) {
            if ($cur_value[$key_to_search] == $search_value) {
                $keys[] = $key;
            }
        }
        return $keys;
    }

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

এই দ্বিতীয় উদাহরণটি আপনাকে দেখায় যে কোনও নির্দিষ্ট সহযোগী কী (প্রথম_নাম) কোন মান ('টেলর') পাওয়া যায় এবং অন্য কোনও মান (সত্য) অন্য সহযোগী কী (নিযুক্ত) তে পাওয়া যায় এবং সমস্ত মিলগুলি ফেরত দেয় (কী যেখানে প্রথম নাম দিয়ে লোকেরা 'টেলর' এবং নিযুক্ত করা হয়)।

/**
 * @param array multidimensional 
 * @param string $search_value The value to search for, ie a specific 'Taylor'
 * @param string $key_to_search The associative key to find it in, ie first_name
 * @param string $other_matching_key The associative key to find in the matches for employed
 * @param string $other_matching_value The value to find in that matching associative key, ie true
 * 
 * @return array keys, ie all the people with the first name 'Taylor' that are employed.
 */
 function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null) {
    // This function will search the revisions for a certain value
    // related to the associative key you are looking for.
    $keys = array();
    foreach ($dataArray as $key => $cur_value) {
        if ($cur_value[$key_to_search] == $search_value) {
            if (isset($other_matching_key) && isset($other_matching_value)) {
                if ($cur_value[$other_matching_key] == $other_matching_value) {
                    $keys[] = $key;
                }
            } else {
                // I must keep in mind that some searches may have multiple
                // matches and others would not, so leave it open with no continues.
                $keys[] = $key;
            }
        }
    }
    return $keys;
}

ফাংশন ব্যবহার করুন

$data = array(
    array(
        'cust_group' => 6,
        'price' => 13.21,
        'price_qty' => 5
    ),
    array(
        'cust_group' => 8,
        'price' => 15.25,
        'price_qty' => 4
    ),
    array(
        'cust_group' => 8,
        'price' => 12.75,
        'price_qty' => 10
    )
);

$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);

ফল

Array ( [0] => 2 ) 

আমি নিম্নোক্ত অ্যারের মধ্যে থা চেক করতে চাই $arr সেখানে সাব অ্যারে আছে 'abc' বিদ্যমান

$arr = array(
    array(
        'title' => 'abc'
    )
);

তারপর আমি এই ব্যবহার করতে পারেন

$res = array_search('abc', array_column($arr, 'title'));
if($res == ''){
    echo 'exists';
} else {
    echo 'notExists';
}

আমি এই সংজ্ঞায়িত করার সবচেয়ে সহজ উপায় মনে হয়


এই চেষ্টা করুন

function search_in_array($srchvalue, $array)
{
    if (is_array($array) && count($array) > 0)
    {
        $foundkey = array_search($srchvalue, $array);
        if ($foundkey === FALSE)
        {
            foreach ($array as $key => $value)
            {
                if (is_array($value) && count($value) > 0)
                {
                    $foundkey = search_in_array($srchvalue, $value);
                    if ($foundkey != FALSE)
                        return $foundkey;
                }
            }
        }
        else
            return $foundkey;
    }
}

এখানে একই জন্য একটি মাছ ধরার নৌকা হয়,

$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];

জ্যাকব এর চমৎকার উত্তরটি তৈরি করা , এখানে আরো সাধারণকরণ অনুসন্ধান যা কী নির্দিষ্ট করার অনুমতি দেবে (কেবলমাত্র আপনার জন্য নয়):

function searcharray($value, $key, $array) {
   foreach ($array as $k => $val) {
       if ($val[$key] == $value) {
           return $k;
       }
   }
   return null;
}

ব্যবহার: $results = searcharray('searchvalue', searchkey, $array);


দেখায় array_filter জন্য উপযুক্ত সমাধান হবে ...

$userdb=Array
(
    (0) => Array
        (
            (uid) => '100',
            (name) => 'Sandra Shush',
            (url) => 'urlof100'
        ),

    (1) => Array
        (
            (uid) => '5465',
            (name) => 'Stefanie Mcmohn',
            (pic_square) => 'urlof100'
        ),

    (2) => Array
        (
            (uid) => '40489',
            (name) => 'Michael',
            (pic_square) => 'urlof40489'
        )
);

পিএইচপি কোড

<?php 
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search){
  return $v['uid'] => $search;
}) 

$values= print_r(array_value($found)); 
$keys =  print_r(array_keys($found)); 

প্রশ্ন মানে যদি

$a = [
     [
       "_id" => "5a96933414d48831a41901f2",
       "discount_amount" => 3.29,
       "discount_id" => "5a92656a14d488570c2c44a2",
     ],
     [
       "_id" => "5a9790fd14d48879cf16a9e8",
       "discount_amount" => 4.53,
       "discount_id" => "5a9265b914d488548513b122",
     ],
     [
       "_id" => "5a98083614d488191304b6c3",
       "discount_amount" => 15.24,
       "discount_id" => "5a92806a14d48858ff5c2ec3",
     ],
     [
       "_id" => "5a982a4914d48824721eafe3",
       "discount_amount" => 45.74,
       "discount_id" => "5a928ce414d488609e73b443",
     ],
    [
       "_id" => "5a982a4914d48824721eafe55",
       "discount_amount" => 10.26,
       "discount_id" => "5a928ce414d488609e73b443",
     ],
   ];

উত্তর:

function searchForId($id, $array) {
    $did=0;
    $dia=0;
   foreach ($array as $key => $val) {
       if ($val['discount_id'] === $id) {
           $dia +=$val['discount_amount'];
           $did++;
       }
   }
    if($dia != '') {
        echo $dia;
        var_dump($did);
    }
   return null;
};
print_r(searchForId('5a928ce414d488609e73b443',$a));

যদি আপনি ব্যবহার করছেন (পিএইচপি 5> = 5.5.0) আপনাকে এটি করার জন্য আপনার নিজস্ব ফাংশন লিখতে হবে না, শুধু এই লাইন লিখুন এবং এটি সম্পন্ন হয়েছে।

আপনি যদি শুধু একটি ফলাফল চান:

$key = array_search(40489, array_column($userdb, 'uid'));

একাধিক ফলাফলের জন্য

$keys = array_keys(array_column($userdb, 'uid'), 40489);

যদি আপনার মতামত হিসাবে নির্দিষ্ট একটি অ্যাসোসিয়েটেড অ্যারের আছে আপনি এটি দিয়ে তৈরি করতে পারে:

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);

আপনি পিএইচপি <5.5.0 ব্যবহার করছেন, আপনি এই ব্যাকপোর্ট ব্যবহার করতে পারেন, ধন্যবাদ র্যামসে!

হালনাগাদ: আমি কিছু সহজ মানচিত্র তৈরি করেছি এবং একাধিক ফলাফল ফর্মটি দ্রুততম মনে হচ্ছে, এমনকি জ্যাকব কাস্টম ফাংশন থেকেও দ্রুত!


শুধু ভাগ, সম্ভবত এই পছন্দ করতে পারেন।

if( ! function_exists('arraySearchMulti')){
function arraySearchMulti($search,$key,$array,$returnKey=false)
{
    foreach ($array as $k => $val) {
        if (isset($val[$key])) {
            if ((string)$val[$key] == (string)$search) {
                return ($returnKey ? $k : $val);
            }
        }else{
            return (is_array($val) ? arraySearchMulti($search,$key,$val,$returnKey) : null);
        }
    }
    return null;
}}

/**
 * searches a simple as well as multi dimension array
 * @param type $needle
 * @param type $haystack
 * @return boolean
 */
public static function in_array_multi($needle, $haystack){
    $needle = trim($needle);
    if(!is_array($haystack))
        return False;

    foreach($haystack as $key=>$value){
        if(is_array($value)){
            if(self::in_array_multi($needle, $value))
                return True;
            else
               self::in_array_multi($needle, $value);
        }
        else
        if(trim($value) === trim($needle)){//visibility fix//
            error_log("$value === $needle setting visibility to 1 hidden");
            return True;
        }
    }

    return False;
}

function searchForId($id, $array) {
   foreach ($array as $key => $val) {
       if ($val['uid'] === $id) {
           return $key;
       }
   }
   return null;
}

এই কাজ করবে। আপনি এটি এই মত কল করা উচিত:

$id = searchForId('100', $userdb);

এটি জানা দরকার যে আপনি যদি === অপারেটর ব্যবহার করছেন তবে তুলনামূলক ধরনগুলি একই রকম হতে হবে, এই উদাহরণে আপনাকে string অনুসন্ধান করতে হবে অথবা == পরিবর্তে === ব্যবহার করুন।

angoru উত্তর উপর ভিত্তি করে। পিএইচপি এর পরবর্তী সংস্করণে ( >= 5.5.0 ) আপনি এক-মাছ ধরার >= 5.5.0 ব্যবহার করতে পারেন।

$key = array_search('100', array_column($userdb, 'uid'));

এখানে ডকুমেন্টেশন: http://php.net/manual/en/function.array-column.php


$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];

$found = null;
$search = 'eee';

array_walk($a, function ($k, $v) use ($search, &$found) {
    if (in_array($search, $k)) {
        $found = $v;
    }
});

var_dump($found);




php