লুপিং ব্যতীত বহুমাত্রিক অ্যারেটিতে কী নির্দিষ্ট নির্দিষ্ট কী (কী) পাওয়া যায়


115

ধরে নেওয়া যাক আমার কাছে নিম্নলিখিত বহুমাত্রিক অ্যারে রয়েছে (মাইএসকিউএল বা কোনও পরিষেবা থেকে প্রাপ্ত):

array(
    array(
        [id] => xxx,
        [name] => blah
    ),
    array(
        [id] => yyy,
        [name] => blahblah
    ),
    array(
        [id] => zzz,
        [name] => blahblahblah
    ),
)

আমরা কি একটি id" বিল্ট-ইন " পিএইচপি ফাংশন কলে এস এর অ্যারে পেতে পারি ? বা কোডের একটি লাইন?
আমি প্রচলিত লুপিং এবং মানটি সম্পর্কে সচেতন তবে আমার এটির দরকার নেই:

foreach($users as $user) {
    $ids[] = $user['id'];
}
print_r($ids);

সম্ভবত কিছু array_map()এবং call_user_func_array()যাদু করতে পারেন।


"আমরা কি একটি ফাংশন কলে আইডির একটি অ্যারে পেতে পারি?" হ্যাঁ, তবে আপনাকে এই ফাংশনটি লিখতে হবে:)
বোরিস গুউরি

@ বরিসগুয়েরি, আমি অন্তর্নির্মিত ফাংশনগুলি বোঝাতে
চাইছিলাম

2
PS: আমি সচেতন আমি foreach($users as $user) {$ids[] = $user['id'];}এক লাইনে লিখতে পারি ! তবে আপনি কী জানেন আমার প্রয়োজন / প্রয়োজন :-)
ifaour

@ ইউজিন, স্পষ্টতই অন্যান্য জিনিসের জন্য আমার অ্যারে দরকার। এবং আবার, এটি কেবল মজাদার জন্য এবং পিএইচপি-তে নতুন শর্টহ্যান্ডগুলি শেখার জন্য।
ifaour

উত্তর:


261

পিএইচপি 5.5 থেকে আপনি ব্যবহার করতে পারেন array_column:

$ids = array_column($users, 'id');

এটি যে কোনও আধুনিক প্রকল্পের পছন্দসই বিকল্প। তবে, আপনাকে অবশ্যই পিএইচপি> 5.5 সমর্থন করতে হলে নিম্নলিখিত বিকল্পগুলি উপস্থিত রয়েছে:

পিএইচপি 5.3 থেকে আপনি array_mapবেনামে ফাংশনটি ব্যবহার করতে পারেন, এটির মতো:

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

এর আগে (প্রযুক্তিগতভাবে php 4.0.6+) এরcreate_function পরিবর্তে আপনাকে অবশ্যই একটি বেনামি ফাংশন তৈরি করতে হবে :

$ids = array_map(create_function('$ar', 'return $ar["id"];'), $users);

দুর্দান্ত, এখন যদি কোনও নেটিভ ফাংশন থাকে যা function ($ar) {return $ar['id'];}কীটির ফেরতের মানের সমান হয় যা দুর্দান্ত হবে! :-)
ifaour

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

আমি যদি চাবিটিও পেতে চাই? মনে করুন: $ আরআর = ['বল' => ['ঝুড়ি' => 5]]; আমি পেতে চাই: $ বল = ['বল' => 5];
ক্রোধ

2
@ অ্যাঞ্জার তারপরে আপনার এই প্রশ্নটির চেয়ে আলাদা প্রশ্ন রয়েছে। আপনি কোন আচরণের প্রত্যাশা করবেন তা যতক্ষণ না আপনি বিশদে উল্লেখ করার জন্য নির্দ্বিধায় অনুভব করুন , উদাহরণস্বরূপ ইনপুট হলে ফলাফল কী হবে ['ball' => ['golf' => 7, 'basket' => 5, 'soccer' => 6], 'shuttle' => ['badminton' => 1]]
ফিহাগ

যেহেতু PHP7.4 আপনি array_mapএকটি তীর ফাংশন দিয়ে ব্যবহার করতে পারেন :$ids = array_map(fn ($ar) => $ar['id'], $users);
user3601546

13

পিএইচপি 5.5+

পিএইচপি 5.5 শুরু হচ্ছে আপনার অ্যারে_ কলাম () রয়েছে উপলব্ধ রয়েছে, যা নীচের অপ্রচলিত করে তোলে।

পিএইচপি 5.3+

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

@ ফিহাগের সমাধান পিএইচপি ৫.৩.০ ​​থেকে পিএইচপি নির্বিঘ্নে কাজ করবে, যদি এর আগে আপনার সমর্থন প্রয়োজন হয়, আপনাকে সেই ডাব্লুপি_লিস্ট_প্লাক অনুলিপি করতে হবে।

পিএইচপি <5.3

ওয়ার্ডপ্রেস 3.1+

ওয়ার্ডপ্রেসে wp_list_pluck নামে একটি ফাংশন রয়েছে যদি আপনি ওয়ার্ডপ্রেস ব্যবহার করেন যা আপনার সমস্যার সমাধান করে।

পিএইচপি <5.3

আপনি যদি ওয়ার্ডপ্রেস ব্যবহার না করে থাকেন , কোডটি ওপেন সোর্স হওয়ায় আপনি আপনার প্রকল্পের কোডটি পেস্ট করে অনুলিপি করতে পারেন (এবং আপনার পছন্দসই কিছুতে ফাংশনটির নাম পরিবর্তন করতে পারেন, যেমন অ্যারে_পিকের মতো)। উত্স দেখুন এখানে


3

যদি idঅ্যারের মধ্যে প্রথম চাবিকাঠি, এই চেষ্টা করবো:

$ids = array_map('current', $users);

আপনার অগত্যা যদিও এটির উপর নির্ভর করা উচিত নয়। :)


-1

আপনি array_reduce()যদি আরও কার্যকরী পদ্ধতির পছন্দ করেন তবে আপনি এটিও ব্যবহার করতে পারেন

এই ক্ষেত্রে:

$userNames = array_reduce($users, function ($carry, $user) {
    array_push($carry, $user['name']);
    return $carry;
}, []);

বা আপনি অভিনব হতে চান,

$userNames = [];
array_map(function ($user) use (&$userNames){
    $userNames[]=$user['name'];
}, $users);

এটি এবং উপরের সমস্ত পদ্ধতিগুলি যদিও পর্দার পিছনে লুপ করে;)


আপনার প্রথম উদাহরণটি অ্যারেকে ফিরিয়ে দেবে না, অ্যারেতে কেবল value ব্যবহারকারীর ['নাম'] এর জন্য পাওয়া শেষ মান। আপনার যেতে যেতে $ বহন এবং ফিরিয়ে দিতে হবে to
প্রোগ্রোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.