আমি কীভাবে পিএইচপিতে অ্যারে এবং ডেটা বাছাই করতে পারি?


292

এই প্রশ্নটি পিএইচপি-তে অ্যারে বাছাই করা সম্পর্কিত প্রশ্নের উত্স হিসাবে বিবেচিত। আপনার বিশেষ কেসটি অনন্য এবং একটি নতুন প্রশ্নের উপযুক্ত বলে মনে করা সহজ, তবে বেশিরভাগই এই পৃষ্ঠার সমাধানগুলির মধ্যে একটির সামান্য প্রকরণ।

যদি আপনার প্রশ্নটির সদৃশ হয়ে থাকে তবে দয়া করে আপনার প্রশ্নটি কেবল আবার খুলতে বলুন যদি আপনি নীচের সমস্তটি থেকে কেন এটি আলাদাভাবে আলাদা তা ব্যাখ্যা করতে পারেন।

আমি কীভাবে পিএইচপি-তে একটি অ্যারে বাছাই করব?
আমি কীভাবে পিএইচপি-তে একটি জটিল অ্যারে বাছাই করব ?
আমি পিএইচপি-তে কীভাবে বস্তুর অ্যারে বাছাই করব?


  1. বেসিক এক-মাত্রিক অ্যারে; Incl। বহুমাত্রিক অ্যারে, সহ। বস্তুর অ্যারে; Incl। অন্যের উপর ভিত্তি করে একটি অ্যারে বাছাই করা

  2. এসপিএলের সাথে বাছাই করা হচ্ছে

  3. স্থিতিশীল বাছাই

পিএইচপি-র বিদ্যমান ফাংশন ব্যবহার করে ব্যবহারিক উত্তরের জন্য দেখুন 1, অ্যালগরিদমগুলি বাছাই করার বিষয়ে একাডেমিক ইন-ডিটেইল উত্তরের জন্য (কোন পিএইচপি এর ফাংশনগুলি বাস্তবায়িত করে এবং যা আপনার সত্যিকারের জটিল ক্ষেত্রে প্রয়োজন হতে পারে ), দেখুন 2।


@ জেটেরি হুবহু, এজন্যই আমি শেষ পর্যন্ত এর বিরুদ্ধে বন্ধ করার জন্য একটি ভাল রেফারেন্স প্রশ্ন করতে পেরেছি। প্রতিটি স্বতন্ত্র স্নোফ্লেকের স্বতন্ত্রভাবে উত্তর দেওয়া কাউকে সহায়তা করে না। :)
ছদ্মবেশ

3
আমি মনে করি লোকেরা পিএইচপি.এন.এই সহজভাবে একবার দেখে নেওয়া উচিত
আলেকজান্ডার

@ অ্যালেক্স হা! একেবারে। সমস্যাটি হ'ল: আরটিএফএম কেউ নেই। : ডি
ডিজেজ

2
আমাদের কাছে ইতিমধ্যে সেগুলি উত্তর রয়েছে, আমি আপনাকে পরামর্শ দিচ্ছি যে কন্টেন্টটিকে নকল করে দেওয়ার (বা পুনর্লিখনের) পরিবর্তে এখানে প্রতিটি উত্তরের মধ্যে সেরা উত্তরের তালিকা দেওয়া উচিত। এছাড়াও অ্যারেগুলি স্বতন্ত্রভাবে দেখা যায় বলে কাজটি যে কোনও ক্ষেত্রেই দ্বিদের বিরুদ্ধে ঘনিষ্ঠ ভোটের জন্য রয়ে যায়।
hakre

1
@ অনুগ্রহ: আরটিএফএম কেউ না থাকলে, কেউ আরটিএফকিউও করবে না
হ্যাক্রে

উত্তর:


164

বেসিক এক মাত্রিক অ্যারে

$array = array(3, 5, 2, 8);

প্রযোজ্য বাছাই ফাংশন:

  • sort
  • rsort
  • asort
  • arsort
  • natsort
  • natcasesort
  • ksort
  • krsort

এর মধ্যে পার্থক্য কেবল কী-মূল সংস্থানগুলি রাখা হয় (" a" ফাংশনগুলি), এটি নিম্ন থেকে উচ্চতর বা বিপরীত (" r") বাছাই করে, মানগুলি বা কীগুলি (" k") বাছাই করে এবং কীভাবে এটি মানের সাথে তুলনা করে (" nat" বনাম স্বাভাবিক)। একটি সংক্ষিপ্তসার এবং আরও বিশদে লিঙ্কগুলির জন্য http://php.net/manual/en/array.sorting.php দেখুন ।

বস্তুর অ্যারে সহ একাধিক মাত্রিক অ্যারে

$array = array(
    array('foo' => 'bar', 'baz' => 42),
    array('foo' => ...,   'baz' => ...),
    ...
);

আপনি যদি $arrayপ্রতিটি প্রবেশের কী 'foo' অনুসারে বাছাই করতে চান , আপনার একটি কাস্টম তুলনা ফাংশন প্রয়োজন । উপরোক্ত sortএবং সম্পর্কিত ফাংশনগুলি সাধারণ মানগুলিতে কাজ করে যেগুলি তারা কীভাবে তুলনা এবং বাছাই করতে জানেন know পিএইচপি কেবল "জানে না" নেই একটি সঙ্গে কি করতে জটিল মান মত array('foo' => 'bar', 'baz' => 42)যদিও; সুতরাং আপনি এটি বলতে হবে।

এটি করতে, আপনাকে একটি তুলনা ফাংশন তৈরি করতে হবে । এই ফাংশনটিতে দুটি উপাদান লাগে এবং 0এই উপাদানগুলিকে সমান হিসাবে বিবেচনা করা হলে অবশ্যই ফিরে আসতে হবে , 0প্রথম মানটি যদি কম হয় তবে তার চেয়ে কম মান এবং প্রথম মান বেশি 0হলে তার চেয়ে বেশি মান। এটাই দরকার:

function cmp(array $a, array $b) {
    if ($a['foo'] < $b['foo']) {
        return -1;
    } else if ($a['foo'] > $b['foo']) {
        return 1;
    } else {
        return 0;
    }
}

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

তারপরে আপনি এই ফাংশনগুলির একটি ব্যবহার করুন:

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

ব্যবহারের উদাহরণ:

usort($array, 'cmp');

usortঅ্যারে থেকে দুটি আইটেম নেবে এবং তাদের সাথে আপনার cmpফাংশন কল করবে। সুতরাং হিসাবে এবং অন্য হিসাবে cmp()ডাকা হবে । এর পরে ফাংশনটি মানগুলির মধ্যে কোনটি বৃহত্তর ছিল বা সেগুলি সমান কিনা তা ফিরিয়ে দেয়। এই প্রক্রিয়া জন্য আলাদা মান ক্ষণস্থায়ী পুনরাবৃত্তি এবং যতক্ষণ না অ্যারের বাছাই হয়। ফাংশন, অনেক বার বলা হবে অন্তত সেখানে মান আছে অনেক বার হিসাবে$aarray('foo' => 'bar', 'baz' => 42)$barray('foo' => ..., 'baz' => ...)usortusort$a$bcmp$array , মান বিভিন্ন সমন্বয় সঙ্গে $aএবং $bপ্রত্যেক সময়।

এই ধারণায় অভ্যস্ত হতে, এটি চেষ্টা করুন:

function cmp($a, $b) {
    echo 'cmp called with $a:', PHP_EOL;
    var_dump($a);
    echo 'and $b:', PHP_EOL;
    var_dump($b);
}

আপনি যা করেছেন তা হ'ল দুটি আইটেমের তুলনা করার জন্য একটি কাস্টম পদ্ধতির সংজ্ঞা দেওয়া হয়েছিল, এটিই আপনার প্রয়োজন। যা সকল ধরণের মান নিয়ে কাজ করে।

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

sort রেফারেন্স অনুসারে বাছাই করে কার্যকর কিছু দেয় না!

নোট করুন যে অ্যারে স্থানে সাজানো হয়েছে , আপনাকে কোনও কিছুর জন্য রিটার্ন মান নির্ধারণ করার দরকার নেই। সাজানো অ্যারে দিয়ে নয়, $array = sort($array)অ্যারের সাথে প্রতিস্থাপন করবে true। মাত্রsort($array); কাজ করে।

কাস্টম সংখ্যার তুলনা

যদি আপনি bazকীটি অনুসারে বাছাই করতে চান যা সংখ্যাসূচক, আপনার যা করা দরকার তা হ'ল:

function cmp(array $a, array $b) {
    return $a['baz'] - $b['baz'];
}

মাউথের মাউথার কাছে ধন্যবাদ এটি <0, 0 বা> 0 এর $aচেয়ে কম, সমান বা তার চেয়ে বড় কিনা তার উপর নির্ভর করে একটি মান দেয়$b

নোট করুন যে এটি floatমানগুলির জন্য ভাল কাজ করবে না , যেহেতু সেগুলি হ্রাস পাবে intএবং নির্ভুলতা হারাবে। স্পষ্ট ব্যবহার করুন -1, 0এবং 1পরিবর্তে মান ফিরে।

অবজেক্টস

আপনার যদি অবজেক্টগুলির একটি অ্যারে থাকে তবে এটি একইভাবে কাজ করে:

function cmp($a, $b) {
    return $a->baz - $b->baz;
}

ক্রিয়াকলাপ

কলিং ফাংশন সহ আপনি তুলনা ফাংশনের অভ্যন্তরে আপনার যা কিছু প্রয়োজন তা করতে পারেন:

function cmp(array $a, array $b) {
    return someFunction($a['baz']) - someFunction($b['baz']);
}

স্ট্রিংস

প্রথম স্ট্রিং তুলনা সংস্করণের জন্য একটি শর্টকাট:

function cmp(array $a, array $b) {
    return strcmp($a['foo'], $b['foo']);
}

strcmpcmpএখানে প্রত্যাশা করা ঠিক কি করে , এটি ফিরে আসে -1, 0বা 1

স্পেসশিপ অপারেটর

পিএইচপি 7 স্পেসশিপ অপারেটর প্রবর্তন করে , যা বিভিন্ন ধরণের তুলনার তুলনায় সমান / ছোট / বৃহতকে এক করে এবং সরল করে:

function cmp(array $a, array $b) {
    return $a['foo'] <=> $b['foo'];
}

একাধিক ক্ষেত্র অনুসারে বাছাই করা হচ্ছে

আপনি যদি প্রাথমিকভাবে বাছাই করতে চান fooতবে fooদুটি উপাদানের জন্য যদি সমান হয় তবে সাজান baz:

function cmp(array $a, array $b) {
    if (($cmp = strcmp($a['foo'], $b['foo'])) !== 0) {
        return $cmp;
    } else {
        return $a['baz'] - $b['baz'];
    }
}

পরিচিতদের জন্য এটি একটি এসকিউএল কোয়েরির সমতুল্য ORDER BY foo, baz
এছাড়াও এটি খুব ঝরঝরে শর্টহ্যান্ড সংস্করণ এবং কীভাবে স্বেচ্ছাসেবী সংখ্যার কীগুলির জন্য গতিময়ভাবে এইরকম তুলনা ফাংশন তৈরি করবেন তা দেখুন

একটি ম্যানুয়াল, স্থিতিশীল ক্রম অনুসারে বাছাই করা হচ্ছে

আপনি যদি "foo", "বার", "বাজ" এর মতো উপাদানগুলিকে "ম্যানুয়াল অর্ডার" এ সাজান চান :

function cmp(array $a, array $b) {
    static $order = array('foo', 'bar', 'baz');
    return array_search($a['foo'], $order) - array_search($b['foo'], $order);
}

উপরের সমস্তটির জন্য, আপনি যদি পিএইচপি 5.3 বা ততোধিক উচ্চতর ব্যবহার করছেন (এবং আপনার সত্যই হওয়া উচিত), সংক্ষিপ্ত কোডের জন্য বেনামে ফাংশন ব্যবহার করুন এবং অন্য কোনও বৈশ্বিক ফাংশনটি ভাসমান এড়াতে:

usort($array, function (array $a, array $b) { return $a['baz'] - $b['baz']; });

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

উপরের সমস্তটির জন্য, আরোহণ এবং উতরাইয়ের ক্রমগুলির মধ্যে স্যুইচ করার জন্য কেবল চারপাশে $aএবং $bআর্গুমেন্টকে অদলবদল করুন । উদাহরণ:

return $a['baz'] - $b['baz']; // ascending
return $b['baz'] - $a['baz']; // descending

অন্যের উপর ভিত্তি করে একটি অ্যারে বাছাই করা

এবং তারপরে অদ্ভুততা রয়েছে array_multisortযা আপনাকে অন্যের উপর ভিত্তি করে একটি অ্যারে বাছাই করতে দেয়:

$array1 = array( 4,   6,   1);
$array2 = array('a', 'b', 'c');

এখানে প্রত্যাশিত ফলাফল হবে:

$array2 = array('c', 'a', 'b');  // the sorted order of $array1

array_multisortসেখানে যেতে ব্যবহার করুন :

array_multisort($array1, $array2);

পিএইচপি 5.5.0 হিসাবে আপনি array_columnএকটি বহুমাত্রিক অ্যারে থেকে একটি কলামটি বের করতে এবং সেই কলামটিতে অ্যারে বাছাই করতে ব্যবহার করতে পারেন :

array_multisort(array_column($array, 'foo'), SORT_DESC, $array);

পিএইচপি 7.0.0 হিসাবে আপনি অবজেক্টগুলির একটি অ্যারে থেকে বৈশিষ্ট্যও বের করতে পারেন।


আপনার যদি আরও সাধারণ কেস থাকে তবে এই উত্তরটি সম্পাদনা করতে দ্বিধা বোধ করুন।


সংখ্যা তুলনা ফাংশন ভাসমান মানগুলির জন্য কাজ করে না; আমি নিশ্চিত আপনি কি জানেন তা আমি নিশ্চিত :)
জ্যাক

1
স্থিতিশীল আদেশের জন্য, আমি array_flip()দ্রুততর অবস্থান অনুসন্ধানের, যেমন $order[$a['foo']]পরিবর্তে ব্যবহার করার জন্য আবেদন করব array_search($a['foo'], $order)
জ্যাক

কিছুটা বড় সম্পাদনা হতে পারে: gist.github.com/Rizier123/24a6248758b53245a63e839d8e08a32b তবে আপনি যদি এটি উন্নতি বলে মনে করেন এবং আমি প্রয়োজনীয় সমস্ত কিছু অন্তর্ভুক্ত করেছি তবে আমি এটি প্রয়োগ করতে পারি।
রিজিয়ার 123

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

@ ডেসেজ মূল চ্যালেঞ্জ, যেহেতু এটি একটি রেফারেন্স প্রশ্নোত্তর, তাই তথ্যটি যতটা সম্ভব কমপ্যাক্ট এবং পঠনযোগ্য হিসাবে প্রদর্শন করা এবং ব্যবহারকারীদের তাদের বাছাইয়ের কাজটি সন্ধান করা সহজ করা। আমি কয়েকটি জিনিস টুইট করেছি: gist.github.com/Rizier123/24a6248758b53245a63e839d8e08a32b তবে আমার এখনও এটি নিয়ে ভাবতে হবে, যদি এটি পৃথক উত্তর হিসাবে পোস্ট করা দরকারী এবং মূল্যবান হয়, যেহেতু এটি অত্যন্ত অনুরূপ সামগ্রী
Rizier123

139

বেশিরভাগ বুনিয়াদি পদ্ধতিগুলি ইতিমধ্যে প্রতারক দ্বারা আবৃত আমি অন্য ধরণের সাজানোর দিকে তাকানোর চেষ্টা করব

এসপিএলের সাথে বাছাই করা হচ্ছে

SplHeap

class SimpleHeapSort extends SplHeap {
    public function compare($a, $b) {
        return strcmp($a, $b);
    }
}

// Let's populate our heap here (data of 2009)
$heap = new SimpleHeapSort();
$heap->insert("a");
$heap->insert("b");
$heap->insert("c");

echo implode(PHP_EOL, iterator_to_array($heap));

আউটপুট

c
b
a

SplMaxHeap

সর্বাধিক শীর্ষে রেখে, স্প্লম্যাক্সহীপ শ্রেণি একটি গাদা মূল কার্যকারিতা সরবরাহ করে।

$heap = new SplMaxHeap();
$heap->insert(1);
$heap->insert(2);
$heap->insert(3);

SplMinHeap

SplMinHeap বর্গ সর্বনিম্ন শীর্ষে রেখে, একটি গাদা মূল কার্যকারিতা সরবরাহ করে।

$heap = new SplMinHeap ();
$heap->insert(3);
$heap->insert(1);
$heap->insert(2);

সাজানোর অন্যান্য প্রকার

বাবল বাছাই

বুদ্বুদ বাছাই সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে :

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

function bubbleSort(array $array) {
    $array_size = count($array);
    for($i = 0; $i < $array_size; $i ++) {
        for($j = 0; $j < $array_size; $j ++) {
            if ($array[$i] < $array[$j]) {
                $tem = $array[$i];
                $array[$i] = $array[$j];
                $array[$j] = $tem;
            }
        }
    }
    return $array;
}

বাছাই বাছাই

বাছাই বাছাই সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে :

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

function selectionSort(array $array) {
    $length = count($array);
    for($i = 0; $i < $length; $i ++) {
        $min = $i;
        for($j = $i + 1; $j < $length; $j ++) {
            if ($array[$j] < $array[$min]) {
                $min = $j;
            }
        }
        $tmp = $array[$min];
        $array[$min] = $array[$i];
        $array[$i] = $tmp;
    }
    return $array;
}

সন্নিবেশ সাজান

সন্নিবেশ সাজানোর উপর উইকিপিডিয়া নিবন্ধ থেকে :

সারণি বাছাই একটি সাধারণ বাছাই করা অ্যালগরিদম যা একবারে চূড়ান্ত বাছাই করা অ্যারে (বা তালিকা) তৈরি করে item এটি কুইকোর্ট, হিপসোর্ট বা মার্জ সাজানোর মতো আরও উন্নত অ্যালগরিদমের চেয়ে বৃহত তালিকার তুলনায় অনেক কম দক্ষ। তবে সন্নিবেশ বাছাই করা বিভিন্ন সুবিধা দেয়:

function insertionSort(array $array) {
    $count = count($array);
    for($i = 1; $i < $count; $i ++) {

        $j = $i - 1;
        // second element of the array
        $element = $array[$i];
        while ( $j >= 0 && $array[$j] > $element ) {
            $array[$j + 1] = $array[$j];
            $array[$j] = $element;
            $j = $j - 1;
        }
    }
    return $array;
}

Shellsort

শেলসোর্ট সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে :

শেলসোর্ট, শেল বাছাই বা শেল পদ্ধতি হিসাবেও পরিচিত, এটি একটি স্থানের তুলনা বাছাই। এটি প্রতিবেশী উপাদানগুলির সাথে সমাপ্তির আগে অনেকগুলি দূরের উপাদানগুলির সাথে উপাদানগুলির তুলনা এবং আদান-প্রদান শুরু করে সন্নিবেশ বা বুদ্বুদ সাজানোর মতো এক্সচেঞ্জিং সাজ্টকে সাধারণীকরণ করে।

function shellSort(array $array) {
    $gaps = array(
            1,
            2,
            3,
            4,
            6
    );
    $gap = array_pop($gaps);
    $length = count($array);
    while ( $gap > 0 ) {
        for($i = $gap; $i < $length; $i ++) {
            $tmp = $array[$i];
            $j = $i;
            while ( $j >= $gap && $array[$j - $gap] > $tmp ) {
                $array[$j] = $array[$j - $gap];
                $j -= $gap;
            }
            $array[$j] = $tmp;
        }
        $gap = array_pop($gaps);
    }
    return $array;
}

চিরুনি বাছাই

কম্বল বাছাই সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে :

চিরুনি সাজান একটি তুলনামূলকভাবে সরল অ্যালগরিদম যা মূলত ১৯৯০ সালে ওলোডজিমিয়ের্জ ডোবোসিউইক ডিজাইন করেছিলেন। পরে এটি ১৯৯১ সালে স্টিফেন লেসি এবং রিচার্ড বক্স দ্বারা আবিষ্কার করা হয়েছিল Com

function combSort(array $array) {
    $gap = count($array);
    $swap = true;
    while ( $gap > 1 || $swap ) {
        if ($gap > 1)
            $gap /= 1.25;
        $swap = false;
        $i = 0;
        while ( $i + $gap < count($array) ) {
            if ($array[$i] > $array[$i + $gap]) {
                // swapping the elements.
                list($array[$i], $array[$i + $gap]) = array(
                        $array[$i + $gap],
                        $array[$i]
                );
                $swap = true;
            }
            $i ++;
        }
    }
    return $array;
}

বাছাই মার্জ

মার্জ বাছাই সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে :

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

function mergeSort(array $array) {
    if (count($array) <= 1)
        return $array;

    $left = mergeSort(array_splice($array, floor(count($array) / 2)));
    $right = mergeSort($array);

    $result = array();

    while ( count($left) > 0 && count($right) > 0 ) {
        if ($left[0] <= $right[0]) {
            array_push($result, array_shift($left));
        } else {
            array_push($result, array_shift($right));
        }
    }
    while ( count($left) > 0 )
        array_push($result, array_shift($left));

    while ( count($right) > 0 )
        array_push($result, array_shift($right));

    return $result;
}

Quicksort

কুইকোর্টের উইকিপিডিয়া নিবন্ধ থেকে :

কুইকোর্ট, বা পার্টিশন-এক্সচেঞ্জ সাজান, টনি হোয়ার দ্বারা বিকাশ করা একটি বাছাই করা অ্যালগরিদম যা গড়ে, ও (এন লগ এন) এন আইটেমগুলি বাছাই করার জন্য তুলনা করে। সবচেয়ে খারাপ ক্ষেত্রে এটি ও (এন 2) তুলনা করে, যদিও এই আচরণটি বিরল।

function quickSort(array $array) {
    if (count($array) == 0) {
        return $array;
    }
    $pivot = $array[0];
    $left = $right = array();
    for($i = 1; $i < count($array); $i ++) {
        if ($array[$i] < $pivot) {
            $left[] = $array[$i];
        } else {
            $right[] = $array[$i];
        }
    }
    return array_merge(quickSort($left), array(
            $pivot
    ), quickSort($right));
}

অনুক্রমের সাজান

পারমুটেশন সাজানোর উইকিপিডিয়া নিবন্ধ থেকে :

পারমুয়েশন সাজান, যা সাজানো বাছাই না হওয়া পর্যন্ত ইনপুট অ্যারে / তালিকার সম্ভাব্য ক্রম উত্পাদন তৈরি করে এগিয়ে যায়।

function permutationSort($items, $perms = array()) {
    if (empty($items)) {
        if (inOrder($perms)) {
            return $perms;
        }
    } else {
        for($i = count($items) - 1; $i >= 0; -- $i) {
            $newitems = $items;
            $newperms = $perms;
            list($foo) = array_splice($newitems, $i, 1);
            array_unshift($newperms, $foo);
            $res = permutationSort($newitems, $newperms);
            if ($res) {
                return $res;
            }
        }
    }
}

function inOrder($array) {
    for($i = 0; $i < count($array); $i ++) {
        if (isset($array[$i + 1])) {
            if ($array[$i] > $array[$i + 1]) {
                return False;
            }
        }
    }
    return True;
}

রেডিক্স বাছাই

Radix বাছাই সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে :

কম্পিউটার বিজ্ঞানে, রেডিক্স বাছাই হ'ল একটি তুলনামূলক পূর্ণসংখ্যার বাছাই করা অ্যালগরিদম যা পৃথক অঙ্কগুলির দ্বারা চাবি গোষ্ঠীকরণের মাধ্যমে পূর্ণসংখ্য কীগুলির সাথে ডেটা বাছাই করে যা একই তাৎপর্যপূর্ণ অবস্থান এবং মানকে ভাগ করে।

// Radix Sort for 0 to 256
function radixSort($array) {
    $n = count($array);
    $partition = array();

    for($slot = 0; $slot < 256; ++ $slot) {
        $partition[] = array();
    }

    for($i = 0; $i < $n; ++ $i) {
        $partition[$array[$i]->age & 0xFF][] = &$array[$i];
    }

    $i = 0;

    for($slot = 0; $slot < 256; ++ $slot) {
        for($j = 0, $n = count($partition[$slot]); $j < $n; ++ $j) {
            $array[$i ++] = &$partition[$slot][$j];
        }
    }
    return $array;
}

4
@ আপনি সমস্ত বেসিকটি কভার করেছেন তা অনুধাবন করুন .. আমাকে প্রাসঙ্গিক হওয়ার জন্য আরও একটি উপায় সন্ধান করতে হবে :)
বাবা

5
আমি আরো একাডেমিক শ্রেণীবিভাজন পদ্ধতি নিয়ে কিছু ভুল দেখছি না :) দর্শন কম সবচেয়ে অ্যাপ্লিকেশনের জন্য দরকারী কিন্তু মাঝে মাঝে তারা বলা হতে পারে জন্য / প্রয়োজনীয় একটি রেফারেন্স বিশেষত যেহেতু আমি সময়ের সাথে এই অধিকাংশ সম্পর্কে forgotton চাই আছে সুবিধাজনক
ডেভ

প্রকৃতপক্ষে, দ্রুত সাজানোর জন্য তিনটি মানের মানের হিসাবে পাইভট নির্বাচন করার পরামর্শ দেওয়া হয় : প্রথম, মধ্য এবং শেষ উপাদানএটি পাইভট সেলাইয়ের জন্য আমার উদাহরণ। এটি সবচেয়ে খারাপ ক্ষেত্রে বিপরীত সাজানো অ্যারে এড়াতে সহায়তা করে (যার ফলে O(n^2)তুলনামূলক কারণ যদি আমরা কেবল প্রথম উপাদানটিকে পাইভট হিসাবে ব্যবহার করব)
আলমা

আমি শুনেছি যে স্প্লিটি স্বাভাবিক অ্যারে বাছাইয়ের চেয়ে দ্রুত কাজ করে .এটা ঠিক?
jewelhuq

আমি ডেভের সাথে একমত, আজকাল প্রায় fw এর অন্তর্ভুক্ত রয়েছে যে কেন আমি খুব কম মনে করি বা ব্যবহার করি।
মাইক Nguyen

43

স্থিতিশীল বাছাই

আসুন ধরে নেওয়া যাক আপনার কাছে এর মতো একটি অ্যারে রয়েছে:

['Kale', 'Kaleidoscope', 'Aardvark', 'Apple', 'Leicester', 'Lovely']

এবং এখন আপনি কেবল প্রথম চিঠিটি বাছাই করতে চান:

usort($array, function($a, $b) {
    return strcmp($a[0], $b[0]);
});

ফলাফলটি হ'ল:

['Apple', 'Aardvark', 'Kale', 'Kaleidoscope', 'Lovely', 'Leicester']

বাছাই স্থিতিশীল ছিল না!

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

শোয়ার্টজিয়ান রূপান্তর

শোয়ার্জিয়ান ট্রান্সফর্মটি সাজসজ্জা-সাজানো-আনকোটার আইডিয়াম হিসাবেও পরিচিত, একটি সহজাত অস্থির বাছাই অ্যালগরিদমের সাথে একটি স্থিতিশীল সাজাকে প্রভাবিত করে।

প্রথমে, আপনি প্রতিটি অ্যারের উপাদানটিকে প্রাথমিক কী (মান) এবং একটি গৌণ কী (এর সূচক বা অবস্থান) নিয়ে গঠিত অন্য অ্যারে দিয়ে সজ্জিত করেন:

array_walk($array, function(&$element, $index) {
    $element = array($element, $index); // decorate
});

এটি অ্যারে এতে রূপান্তর করে:

[
    ['Kale', 0], ['Kaleidoscope', 1], 
    ['Aardvark', 2], ['Apple', 3], 
    ['Leicester', 4], ['Lovely', 5]
]

এখন, আমরা তুলনার পদক্ষেপটি সামঞ্জস্য করি; আমরা প্রথম চিঠিটি আবার তুলনা করি, তবে সেগুলি যদি একই হয় তবে গৌণ কীটি মূল ক্রম ধরে রাখতে ব্যবহার করা হয়:

usort($array, function($a, $b) {
    // $a[0] and $b[0] contain the primary sort key
    // $a[1] and $b[1] contain the secondary sort key
    $tmp = strcmp($a[0][0], $b[0][0]);

    if ($tmp != 0) {
        return $tmp; // use primary key comparison results
    }

    return $a[1] - $b[1]; // use secondary key
});

এরপরে, আমরা আনকোটার:

array_walk($array, function(&$element) {
    $element = $element[0];
});

চূড়ান্ত ফলাফল:

['Aardvark', 'Apple', 'Kale', 'Kaleidoscope', 'Leicester', 'Lovely']

পুনরায় ব্যবহার সম্পর্কে কি?

রুপান্তরিত অ্যারে উপাদানগুলির সাথে কাজ করতে আপনাকে আপনার তুলনা ফাংশনটি আবার লিখতে হয়েছিল; আপনি আপনার সূক্ষ্ম তুলনা ফাংশন সম্পাদনা করতে চাইবেন না, তাই তুলনা ফাংশনটির জন্য এখানে একটি র‍্যাপার রয়েছে:

function stablecmp($fn)
{
    return function($a, $b) use ($fn) {
        if (($tmp = call_user_func($fn, $a[0], $b[0])) != 0) {
            return $tmp;
        } else {
            return $a[1] - $b[1];
        }
    };
}

এই ফাংশনটি ব্যবহার করে সাজানো পদক্ষেপটি লিখি:

usort($array, stablecmp(function($a, $b) {
    return strcmp($a[0], $b[0]);
}));

ভাল খবর! আপনার প্রাথমিক তুলনা কোডটি ফিরে এসেছে।


আপনার এই বাক্যটি "সহজাতভাবে অস্থির বাছাই করা অ্যালগরিদমের সাথে একটি স্থিতিশীল সাজাকে প্রভাবিত করে" আমার জন্য আহ-হা মুহূর্ত। উইকিপিডিয়া পৃষ্ঠায় স্থিতিশীল শব্দের কোনও উল্লেখ নেই, যা দেখে মনে হয় রূপান্তরটির সৌন্দর্য বলে মনে হচ্ছে। লজ্জা।
টাইলার কলিয়ার

1
@ টাইলারকোলিয়ার হ্যাঁ, আপনাকে সেই উইকিপিডিয়া রেফারেন্সের লাইনের মধ্যে পড়তে হবে ... আমি আপনাকে তা করতে অসুবিধা থেকে বাঁচিয়েছি ;-)
জ্যাক ২:১৫

15

পিএইচপি 5.3 হিসাবে ক্লোজার সহ আপনার সাজানোর ক্রম নির্ধারণের জন্য একটি ক্লোজার ব্যবহার করাও সম্ভব।

উদাহরণস্বরূপ ধরে নেওয়া $ অ্যারে এমন এক বস্তুর অ্যারে যা এক মাসের সম্পত্তি থাকে।

 $orderArray = array("Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec");

 usort($array, function($a, $b) use ($orderArray){
       return array_search($a->month, $orderArray) - array_search($b->month, $orderArray);
 }); 

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

9

LINQ

.NET- এ, লিনিক্যু প্রায়শই বাছাইয়ের জন্য ব্যবহৃত হয়, যা তুলনা ফাংশনগুলির তুলনায় অনেক ভাল সিনট্যাক্স সরবরাহ করে, বিশেষত যখন একাধিক ক্ষেত্র দ্বারা অবজেক্টগুলিকে বাছাই করা প্রয়োজন। লিনকু থেকে পিএইচপি এর বেশ কয়েকটি বন্দর রয়েছে, যা ইলিনকো লাইব্রেরি সহ * রয়েছে। এটির সাহায্যে জটিল তুলনা ফাংশন না লিখে অ্যারেগুলিকে একটি লাইনের সাথে বাছাই করা যায়।

$sortedByName         = from($objects)->orderBy('$v->name');
$sortedByCount        = from($objects)->orderBy('$v->count');
$sortedByCountAndName = from($objects)->orderBy('$v->count')->thenBy('$v->name');

দ্বিতীয় যুক্তি হিসাবে কলব্যাক পাস করে তুলনা আরও কাস্টমাইজ করা যেতে পারে, উদাহরণস্বরূপ:

$sortedByFilenameNat  = from($objects)->orderBy('$v->filename', 'strnatcmp');

এখানে, '$v->count'একটি সংক্ষিপ্তকরণ function ($v) { return $v->count; }(হয় ব্যবহার করা যেতে পারে) hand এই পদ্ধতির চেইনগুলি পুনরাবৃত্তির প্রত্যাবর্তন করে, পুনরাবৃত্তকারীরা ->toArray()প্রয়োজনে শেষে যোগ করে অ্যারেতে রূপান্তরিত হতে পারে ।

অভ্যন্তরীণভাবে, orderByএবং সংশ্লিষ্ট পদ্ধতির কল উপযুক্ত অ্যারের বাছাই ফাংশন ( uasort, krsort, multisort, usortইত্যাদি)।

লিনকিউতে এসকিউএল দ্বারা অনুপ্রাণিত আরও অনেকগুলি পদ্ধতি রয়েছে: ফিল্টারিং, গ্রুপিং, যোগদান, একত্রিতকরণ ইত্যাদি It's

* আমার দ্বারা বিকাশিত, আরও বিশদ বিবরণ এবং অন্যান্য লিনকিউ বন্দরগুলির সাথে তুলনা করার জন্য রিডমি দেখুন


3

মূল মানের দ্বারা বহুমাত্রিক বাছাই

মূল মান অনুসারে বহুমাত্রিক অ্যারে প্রাকৃতিক সাজান এবং মূল ক্রমটিও রাখুন (মূল কীগুলি পরিবর্তন করবেন না):

function multisortByKeyValue( $k, $arr ) {
    $ids   = array();
    $index = 1;

    foreach ( $arr as $key => $row ) {
        $ids[ $key ] = intval( $row[ $k ] ) . '-' . $index . '-' . $key;
        $index ++;
    }

    natsort( $ids );

    $arr = array_merge( $ids, $arr );

    return $arr;
}

পরীক্ষা ক্ষেত্রে:

$arr = array(
    'id1' => array(
        'label'    => 'ID 1',
        'priority' => 30,
    ),
    'id2' => array(
        'label'    => 'ID 2',
        'priority' => 70,
    ),
    'id3' => array(
        'label'    => 'ID 3',
        'priority' => 20,
    ),
    'id4' => array(
        'label'    => 'ID 4',
        'priority' => 30,
    ),
);

$sorted = multisortByKeyValue( 'priority', $arr );

// $sorted equals to:
/*
array (
  'id3' => array (
    'label' => 'ID 3',
    'priority' => 20,
  ),
  'id1' => array (
    'label' => 'ID 1',
    'priority' => 30,
  ),
  'id4' => array (
    'label' => 'ID 4',
    'priority' => 30,
  ),
  'id2' => array (
    'label' => 'ID 2',
    'priority' => 70,
  ),
)
*/

2

এনএসপিএল থেকে সাজানো ফাংশন সহ অ্যারেগুলি বাছাই করা খুব সুবিধাজনক :

বেসিক বাছাই

// Sort array
$sorted = sorted([3, 1, 2]);

// Sort array in descending order
$sortedDesc = sorted([3, 1, 2], true);

ফাংশন ফলাফল অনুসারে বাছাই করা

// Sort array by the result of a given function (order words by length)
$sortedByLength = sorted(['bc', 'a', 'abc'], 'strlen');
$sortedByLengthDesc = sorted(['bc', 'a', 'abc'], true, 'strlen');

// Sort array by the result of user-defined function (order words by the 1st character)
$sortedByTheFirstCharacter = sorted(['bc', 'a', 'abc'], function($v) { return $v[0]; }); 

// Which is the same as
$sortedByTheFirstCharacter = sorted(['bc', 'a', 'abc'], itemGetter(0));
$sortedByTheFirstCharacterDesc = sorted(['bc', 'a', 'abc'], true, itemGetter(0));

// itemGetter(0) returns a function which takes an argument with access by index/key
// and returns the value at index 0

বহুমাত্রিক অ্যারে বাছাই করা হচ্ছে

// Sort multidimensional array (sort list of users by their names)
$users = [
    array('name' => 'Robert', 'age' => 20),
    array('name' => 'Alex', 'age' => 30),
    array('name' => 'Jack', 'age' => 25),
];
$sortedByName = sorted($users, itemGetter('name'));
$sortedByNameDesc = sorted($users, true, itemGetter('name'));

// itemGetter('name') returns a function which takes an argument with access by index/key
// and returns the value of the 'name' key

অবজেক্টের অ্যারে বাছাই করা হচ্ছে

// Lets assume we have class User(name, age) with properties name and age
// and public methods getName() and getAge()
$users = [
    new User('Robert', 20),
    new User('Alex', 30),
    new User('Jack', 25),
];

// Sort list of objects by property value (sort list of users by their name)
$sortedByName = sorted($users, propertyGetter('name'));
$sortedByNameDesc = sorted($users, true, propertyGetter('name'));

// propertyGetter('name') returns a function which takes an object
// and returns the value of its 'name' property

// Sort list of objects by method result (sort list of users by their age)
$sortedByAge = sorted($users, methodCaller('getAge'));
$sortedByAgeDesc = sorted($users, true, methodCaller('getAge'));

// methodCaller('getAge') returns a function which takes an object
// and returns the result of its getAge() method

তুলনা ফাংশন দিয়ে বাছাই করা হচ্ছে

// Sort with a comparison function (order words lexicographically with strcmp)
$sortedLexicographically = sorted(['bc', 'a', 'abc'], false, null, 'strcmp');

// Sort with user-defined comparison function (order words by the 1st character)
$sortedByTheFirstCharacter = sorted(['bc', 'a', 'abc'], false, null, function($v1, $v2) {
    return chr($v1[0]) - chr($v2[0]);
});

আপনি এই সমস্ত উদাহরণ এখানে দেখতে পারেন ।


2

আপনি যদি মূল মান অনুসারে অর্ডার করতে চান তবে আপনি এটি এক লাইনে মার্জিত এবং পরিষ্কার করতে পারেন। এটি দাম আরোহণের মাধ্যমে অর্ডার করবে। অ্যারে_মল্টিসোর্ট এবং অ্যারে_ক্লমম ব্যবহার করে।

   Array([0] => Array ( [name] => eggs [price] => 1 ) [1] => Array ( [name] => coffee [price] => 9.99 ) [2] => Array ( [name] => rice [price] => 4.04 ) )

   array_multisort (array_column($array, 'price'), SORT_ASC, $array);

উৎপাদন করা

     Array ( [0] => Array ( [name] => eggs [price] => 1 ) [1] => Array ( [name] => rice [price] => 4.04 ) [2] => Array ( [name] => coffee [price] => 9.99 ) )

1

এই পৃষ্ঠাটি খুব বিস্তৃত, তবে আমি স্পেসশিপ অপারেটরের দুর্দান্ত উপযোগিতা (তিন উপায় তুলনা অপারেটর) - পিএইচপি 7 এর একটি সুন্দর শিশু সম্পর্কে আরও কিছু যোগ করতে চাই।

একাধিক বাছাই শর্ত প্রয়োগ করতে স্পেসশিপ অপারেটর ব্যবহার করে

কোড ব্লাট কমাতে এবং পঠনযোগ্যতার উন্নতি করতে এটি দুর্দান্ত পদক্ষেপ নিয়েছে।

একাধিক শর্ত প্রক্রিয়া করার জন্য আপনার কাস্টম বাছাই ( usort()/ uasort()/ uksort()) ফাংশনটি লেখার সময় , আপনাকে কেবল অপারেটরের উভয় দিকে ভারসাম্যপূর্ণ অ্যারে লিখতে হবে এবং ফলাফলটি ফিরে আসতে হবে। আর নেস্টেড শর্ত অবরোধ বা একাধিক রিটার্ন নেই।

অপারেটরের উভয় পক্ষের উপাদানগুলি একবারে একবারে বাম থেকে ডানদিকে ট্র্যাভার্স করা হবে এবং নন-টাইয়ের মুখোমুখি হওয়ার সাথে সাথে বা সমস্ত উপাদানের সাথে তুলনা করা হলে মূল্যায়ন ফিরিয়ে দেওয়া হবে।

আমার বিক্ষোভের জন্য নমুনা ডেটা:

$multidimArray = [
    'a' => [
        'boolean' => true,
        'natString' => 'text10',
        'object' => (object)['prop' => 2],
        'float' => -.5,
        'mixed' => []
    ],
    'b' => [
        'boolean' => true,
        'natString' => 'text12',
        'object' => (object)['prop' => 4],
        'float' => 0,
        'mixed' => null
    ],
    'c' => [
        'boolean' => false,
        'natString' => 'text100',
        'object' => (object)['prop' => 9],
        'float' => -.5,
        'mixed' => false
    ],
    'd' => [
        'boolean' => true,
        'natString' => 'text1',
        'object' => (object)['prop' => 9],
        'float' => -5,
        'mixed' => "\0"
    ],
    'e' => [
        'boolean' => false,
        'natString' => 'text2',
        'object' => (object)['prop' => 2],
        'float' => .5,
        'mixed' => ''
    ]
];

বিক্ষোভ (স্ট্যাকওভারফ্লো পৃষ্ঠা ব্লাট এড়াতে, আউটপুটগুলির জন্য ডেমো লিঙ্কটি দেখুন ):

  • বাছাইয়ের যুক্তি:

    1. বুলিয়ান ডিইএসসি (মিথ্যা = 0, সত্য = 1, সুতরাং ফলসের আগে ট্রু)
    2. ভাসা এএসসি

      uasort($multidimArray, function($a, $b) {
          return [$b['boolean'], $a['float']] <=> [$a['boolean'], $b['float']];
      });
  • বাছাইয়ের যুক্তি:

    1. মিশ্র এএসসি
    2. অবজেক্ট এএসসি
    3. বুলিয়ান এএসসি

      uasort($multidimArray, function($a, $b) {
          return [$a['mixed'], $a['object']->prop, $a['boolean']] <=> [$b['mixed'], $b['object']->prop, $b['boolean']];
      });
  • বাছাইয়ের যুক্তি:

    1. বস্তুর ASC এর সম্পত্তি গণনা
    2. মিশ্র DESC এর পুনরুক্তি
    3. নাটস্ট্রিংয়ের দৈর্ঘ্য এএসসি
    4. নাটস্ট্রিং এএসসি

      uasort($multidimArray, function($a, $b) {
          return [count(get_object_vars($a['object'])), is_iterable($a['mixed']), strlen($a['natString']), $a['natString']]
                 <=>
                 [count(get_object_vars($b['object'])), is_iterable($b['mixed']), strlen($b['natString']), $b['natString']];
      });

এই বাক্য গঠনটি আপনাকে মান, কার্যকরী ফলাফল, গভীর-নেস্টেড ডেটা এবং একটি মার্জিত ফ্যাশনে দিক বাছাইয়ের মঞ্জুরি দেয়। এটি অবশ্যই আপনার পিএইচপি টুলবেল্টে রাখার মতো ... আপনি যখন নন-ডাটাবেস ডেটা প্রক্রিয়াকরণ করছেন তখন অবশ্যই এসকিউএল অনেক বেশি বুদ্ধিমান কৌশল হবে।

আপনার নিজের বিবেচনার ভিত্তিতে, PHP7.4 থেকে আপনি এই বেনাম ফাংশনগুলির সাথে তীর সিনট্যাক্স ব্যবহার করতে পারেন। তীর সিনট্যাক্স সহ একই স্ক্রিপ্ট


0

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

$collection->sortBy('forename')->sortBy('surname');

অর্থাৎ প্রথমে a, b, তারপর c এর মাধ্যমে বাছাই করার জন্য সঠিক ধারাটি হবে

sortBy('c')->sortBy('b')->sortBy('a')

https://packagist.org/packages/tightenco/collect


-1

অ্যারে বাছাই করার বিভিন্ন উপায় রয়েছে that আমি সেই টাস্কটি করার জন্য কিছু পদ্ধতির উল্লেখ করব all সবার আগে আমি একটি পূর্ণসংখ্যা অ্যারে দেব যা '$ সংখ্যা' নামে পরিচিত।

$number = array(8,9,3,4,0,1,2);

এটি অ্যারে তৈরির সাধারণ উপায়। মনে করুন যে, আমি সেই অ্যারেটিকে আরোহণের ক্রমে বাছাই করতে চাই For এর জন্য 'সাজ্ট ()' পদ্ধতি ব্যবহার করা যেতে পারে।

<?php

    $number = array(8,9,3,4,0,1,2);
    sort($number);

   foreach ($number as $value) {
       echo $value."  ";
   }
?>

এখন এর আউটপুট বিবেচনা করুন,

এখানে চিত্র বর্ণনা লিখুন

আপনি প্রিন্টেড নম্বর অ্যারে বাছাই করা দেখতে পারেন। আপনি যদি সেই সংখ্যার অ্যারেটিকে সাজানোর জন্য চান অবতরণ ক্রম হয়, তবে 'আরএস্ট ()' পদ্ধতিটি সেই কাজের জন্য ব্যবহার করা যেতে পারে।

<?php

     $number = array(8,9,3,4,0,1,2);
     rsort($number);

     foreach ($number as $value) {
        echo $value."  ";
     }
?>

আউটপুট বিবেচনা ..

এখানে চিত্র বর্ণনা লিখুন

এখন অ্যারে সাজানো হয় সাজানো ক্রমে। ওক, আসুন একটি এসোসিয়েটিভ অ্যারে বিবেচনা করুন I আমি একটি এসোসিয়েটিভ অ্যারে দেব (এসোসিয়েটিভ অ্যারের অর্থ, এমন একটি অ্যারে যার প্রতিটি সূচকের অনন্য কী মান রয়েছে)) এর মতো,

$number = array('eight'=>8,'nine'=>9,'three'=>3,'fore'=>4,'zero'=>0,'one'=>1,'two'=>2);

সুতরাং, এখন আমি এই অ্যারেটিকে তাদের মান অনুসারে আরোহী ক্রমে বাছাই করতে চাই''সোর্ট () 'পদ্ধতিটি এর জন্য ব্যবহার করা যেতে পারে।

<?php

   $number = array('eight'=>8,'nine'=>9,'three'=>3,'fore'=>4,'zero'=>0,'one'=>1,'two'=>2);
   asort($number);

   foreach ($number as $value) {
      echo $value."  ";
    }
?>

যদি তাদের মান অনুসারে অবতরণ ক্রমকে বাছাই করা হয়, তবে 'আর্সোর্ট ()' পদ্ধতি ব্যবহার করা যেতে পারে। মনে করুন যে আপনি সেই অ্যারেটি তাদের মূল মান অনুসারে বাছাই করতে চান। এটিতে 'ksort ()' পদ্ধতি ব্যবহার করা যেতে পারে।

<?php

     $number = array('eight'=>8,'nine'=>9,'three'=>3,'fore'=>4,'zero'=>0,'one'=>1,'two'=>2);
     ksort($number);

     foreach ($number as $value) {
         echo $value."  ";
     }
?>

এখন আউটপুট বিবেচনা করুন। এখানে চিত্র বর্ণনা লিখুন

এখন অ্যারেটি তাদের মূল মান অনুসারে বাছাই করা হয়েছে I আপনি যদি তাদের মূল মান অনুসারে অ্যারেটিকে অবতরণ ক্রমে বাছাই করতে চান তবে 'krsort ()' পদ্ধতি ব্যবহার করা যেতে পারে।

<?php

    $number = array('eight'=>8,'nine'=>9,'three'=>3,'fore'=>4,'zero'=>0,'one'=>1,'two'=>2);
    krsort($number);

    foreach ($number as $value) {
       echo $value."  ";
    }
?>

এখন এসোসিয়েটিভ অ্যারেগুলি তাদের মূল মান অনুসারে অবতরণ ক্রমে সাজানো হয়েছে the আউটপুটটি দেখুন। এখানে চিত্র বর্ণনা লিখুন

পিএইচপি তে আরোহী বা অবতরণ ক্রমে একটি অ্যারে বাছাই করার জন্য এগুলি কয়েকটি পদ্ধতি I আমি আশা করি আপনি একটি ধারণা পেতে পারেন han ধন্যবাদ!


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

-2

সবচেয়ে সহজ হ'ল কোনও লুপিং ছাড়াই অ্যারে বাছাই করার জন্য আমদানি কার্যটি ব্যবহার করা: নীচে একটি উদাহরণ দেওয়া হল:

   $array_compare= array("0" =>4,"1"=>2,"2"=>500,"3"=>100);

এটি ডিসেন্ডিং ক্রম অনুসারে বাছাই করবে:

usort($array_compare, function($a, $b) {
        return ($b['x1'] - $a['x1']) > 0 ? 1 :-1;
    });

এটি আસેন্ডিং ক্রম অনুসারে বাছাই করবে:

usort($array_compare, function($a, $b) {
        return ($b['x1'] - $a['x1']) < 0 ? 1 :-1;
    });

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