একটি অ্যারের প্রথম উপাদান পান


1071

আমার একটি অ্যারে আছে:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

আমি এই অ্যারের প্রথম উপাদানটি পেতে চাই। প্রত্যাশিত ফলাফল: স্ট্রিং apple

একটি প্রয়োজনীয়তা: এটি রেফারেন্স দিয়ে পাস দিয়ে করাarray_shift যায় না , সুতরাং এটি ভাল সমাধান নয়।

কিভাবে আমি এটি করতে পারব?


1
আপনার অর্থ কী, রেফারেন্স দিয়ে করা যায় না?
সিজেকে

&$arrayপ্যারাম হিসাবে ব্যবহার করে কাজ করা উচিত নয় ।
এইচএসজেড

4
আমি সন্দেহ করি যে আপনি "সত্যিকারের" দ্বারা "রেফারেন্স দিয়ে কাজটি করা যায় না" তার অর্থ হ'ল আপনার অ্যারেটি একটি ডাটাবেস থেকে গতিশীলভাবে ফিরে আসবে এবং আপনি প্রথম উপাদানটি গ্রহণের আগে অ্যারেটিকে একটি পরিবর্তনশীল হিসাবে স্থান দিতে চান না ইহা হতে. যদি আমি সঠিক, তবে নীচে আপনাকে প্রদত্ত সমস্ত সমাধানের সিংহভাগ (স্বীকৃত উত্তর সহ) অপ্রতুল।
কার্টবফোরহর্স

আপনার কি কেবল এটি পেতে বা এটি পেতে এবং বিদ্যমান অ্যারে থেকে সরিয়ে ফেলতে হবে?
জো স্মু

অ্যারেগুলির মৌলিক ব্যবহারের জন্য আপনি এই লিঙ্কটি পর্যালোচনা করতে পারেন টেকনোফিউশনস
বিক্রান্ত বীর ভাল্লা

উত্তর:


1367

আসল উত্তর, তবে ব্যয়বহুল (ও (এন)):

array_shift(array_values($array));

ও (1) এ:

array_pop(array_reverse($array));

অন্যান্য ব্যবহারের ক্ষেত্রে, ইত্যাদি ...

এর (অ্যারে পয়েন্টারগুলি পুনরায় সেট করার অর্থে) পরিবর্তন করা যদি $arrayসমস্যা না হয় তবে আপনি ব্যবহার করতে পারেন:

reset($array);

এটি তাত্ত্বিকভাবে আরও দক্ষ হওয়া উচিত, যদি একটি অ্যারের "অনুলিপি" প্রয়োজন হয়:

array_shift(array_slice($array, 0, 1));

পিএইচপি 5.4+ সহ (তবে শূন্য হলে কোনও সূচক ত্রুটির কারণ হতে পারে):

array_values($array)[0];

77
অ্যারে_ভ্যালুগুলি () দিয়ে আসল অ্যারেটি সংশোধন করা রোধ করতে চতুর কাজটির জন্য +1
ক্রিসআর

44
আমি এটি পেয়েছি: <b> কঠোর মান </ b>: কেবলমাত্র ভেরিয়েবলগুলি রেফারেন্স দ্বারা পাস করা উচিত। চমৎকার কাজের বিটিডব্লিউ
সিমোন

191
এটি কি একটু ওভারকিল নয়? অ্যারেটিতে কয়েক হাজার উপাদান রয়েছে কি না? এটির প্রথম উপাদানটি পেতে কেবল একটি সম্পূর্ণ নতুন অ্যারে তৈরি করা কি ন্যায়সঙ্গত? list()এবং reset()আমার মতে অনেক ভাল সমাধান।
মার্টিন দিমিত্রভ

33
আমি রাজী. এক সারির তুলনায় মোট ওভারকিল এবং অসাধারণ সংস্থান ভারী যা বর্তমান মানটিকে পুনরায় সেট করে এবং ফেরত দেয়: রিসেট ($ অ্যারে);
zmonteca

48
-1 উপরোক্ত কমেন্টাররা যেমন বলেছেন। এটা আমার কাছে অবাক করে দেয় যে এটিতে 101 টি upvotes রয়েছে।
অরবিটে হালকা ঘোড়দৌড়

789

মাইক যেভাবে নির্দেশ করেছেন (সবচেয়ে সহজতম উপায়):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); // Echoes "apple"

আপনি যদি কীটি পেতে চান: (পুনরায় সেট করার পরে এটি কার্যকর করুন)

echo key($arr); // Echoes "4"

থেকে পিএইচপি এর ডকুমেন্টেশন :

মিশ্র পুনরায় সেট (অ্যারে & $ অ্যারে );

বর্ণনা:

রিসেট () rewinds অ্যারে এর প্রথম উপাদানে অভ্যন্তরীণ পয়েন্টার এবং প্রথম বিন্যাস উপাদানের মান, বা মিথ্যা ফেরত পাঠায় যদি অ্যারের খালি।


যদিও এটি পুনরায় সেট করার রেফারেন্স দিয়ে পাস করা হয়েছে, মূল অ্যারেটি সংশোধন করা হয়নি। আমি অনুমান করছি যে কারণটি এইচএসজেড এটি রেফারেন্স দিয়ে পাস করতে চায় না ..?
ডেনিস জামিন

10
অ্যারের পুনরুক্তি পরিবর্তন করা হয়েছে। আপনি যদি foreachসাবজেক্ট অ্যারে দিয়ে এটি করেন তবে আপনি এটি স্ক্রু করবেন।
জেনেক্সার

2
@ জেনেক্সার এটি সর্বদা (সাধারণত) সত্য নয়। সাধারণত অনুশীলনে, foreachঅ্যারের অনুলিপি করে যা এটি লুপ করে চলেছে।
লুক কাজিন্স

1
@ পুনরায় সেট করার পরেও, আপনি কল করতে পারবেন key($arr)এবং আপনি '4' পাবেন (উত্তরে যুক্ত করুন)
লিপ

3
@ জেনেক্সার বা লুচ কাজিন্স উভয়ই সঠিক নয়: 1) ফোরচ কোনও অ্যারের ইন্টারন্যাট পয়েন্টার ব্যবহার করে না - পরিবর্তে এটি নিজস্ব পয়েন্টার তৈরি করে। পূর্বাভাসের ভিতরে কলিং রিসেট চেক করা সহজ - লুপটি কোনও প্রভাব ছাড়াই এটি অনুসরণ করবে reset()। 2) না, পূর্ববর্তী কোনও অ্যারের অনুলিপি তৈরি করে না !!! এটি কেবল এটির নিজস্ব পয়েন্টার তৈরি করে (বিদ্যমান বিদ্যমানটির একটি অনুলিপিও নয় - এটি যাচাই করাও সহজ, ফোরচের next()আগে ফোন করা )।
dmikam

278
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key

2
আমি আসলে এটি পরীক্ষা করে দেখিনি, তবে মনে হচ্ছে এই পদ্ধতিটি সবচেয়ে কার্যকর হবে।
mason81

4
কেবল সমস্যাটিই মূল্যের জন্য নয়, মূল্যের জন্য প্রশ্ন করা হয়। সুতরাং বর্তমান ($ অ্যারে) কী ($ অ্যারে) এর পরিবর্তে ব্যবহার করা উচিত
zmonteca

4
@zmonteca $ প্রথম_মূল্য = পুনরায় সেট করুন ($ অ্যারে); এখানে আপনি মান পাবেন, পুনরায় সেট করুন () ফাংশনটি অ্যারের অভ্যন্তরীণ পয়েন্টারটিকে রিওয়াইন্ড করে এবং প্রথম উপাদানটি ফেরত দেয়।
এস

1
সেরা উত্তর! প্রথম মানটি পেতে কী () সমতুল্যতা খুঁজছিল। এটি সাহায্য করে!
আলাইন টাইম্বলো

98
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

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


1
পেল না, তুমি কী বোঝাতে চাও? প্রথমটির কীটি অন্যগুলির চেয়ে বড় কিনা তা সূক্ষ্মভাবে কাজ করে।
yoda

29
+1 এফওয়াইআই reset()ইতিমধ্যে প্রথম উপাদানটি ফেরত দেয়, তাই ব্যবহারের দরকার নেই current()- echo reset($arr)যথেষ্ট হওয়া উচিত
মাইক

@ মাইক তবে আপনি পিএইচপি বিজ্ঞপ্তি / রেফারেন্সের ক্ষেত্রে উত্পন্ন ত্রুটি এড়াতে পছন্দ currentকরতে resetপারেন, যেমন current(array_filter(...));3v4l তে
সিপিএইচপিথন

91

current($array)পিএইচপি ম্যানুয়াল অনুসারে আপনাকে অ্যারের প্রথম উপাদানটি পেতে পারে

প্রতিটি অ্যারের তার "বর্তমান" উপাদানটির অভ্যন্তরীণ পয়েন্টার থাকে, যা অ্যারেতে প্রবেশ করা প্রথম উপাদানটির সাথে আরম্ভ করা হয়।

সুতরাং আপনি অ্যারে পয়েন্টারকে পুনরায় অবস্থান না করা পর্যন্ত এটি কাজ করে এবং অন্যথায় আপনাকে অ্যারেটিকে পুনরায় সেট করতে হবে।


4
আমি জানিনা কেন এটি গৃহীত উত্তর ছিল না, কারণ এটি মোটামুটি সহজ এবং নির্ভুলভাবে প্রশ্নের উত্তর দেয়।
relipse

26
current($array)অ্যারে পয়েন্টারটি "বর্তমানে" প্রথম উপাদানটির দিকে নির্দেশ করলে কেবল কাজ করবে, অন্যথায় reset($array)প্রয়োজন হবে।
জন

6
মনে হচ্ছে এটি current()আর রেফারেন্সের প্রয়োজন নেই, যদিও পিএইচপি ডক্স এটি প্রতিফলিত করে না। সুতরাং আমি মনে করি এটি সেরা সমাধান হয়ে উঠেছে।
রায়ান 0

@ রায়ান রাজি হয়েছিলেন, তবে এই একই থ্রেডের এই উত্তরটিতে 2014 এর 2 বছর আগে এই সমাধান দেওয়া হয়েছিল ... বিস্ময়কর যে এই অসম্পূর্ণ বাক্যটি আরও উত্সাহ পেয়েছে।
সিপিএইচপিথন

70

আপনি একটি ভাষা নির্মাণ, "তালিকা" দিয়ে নবম উপাদানটি পেতে পারেন:

// First item
list($firstItem) = $yourArray;

// First item from an array that is returned from a function
list($firstItem) = functionThatReturnsArray();

// Second item
list( , $secondItem) = $yourArray;

সঙ্গে array_keysফাংশন আপনি কী জন্য একই কাজ করতে পারেন:

list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);

2
এটি হ'ল আমি যা করি: list($first_value) = $my_array;আমার মতে, সবচেয়ে ভাল বিকল্প। এখানে উপস্থাপন করা অন্যান্য উত্তরগুলির মধ্যে এটির সমস্যা নেই: কোনও "ওভারকিল" কারণ এটি অনুলিপি করে না বা অ্যারে বা একটি নতুন তৈরি করে না। কোনও "রেফারেন্স" নেই: অ্যারেটি সংশোধিত হয়নি। কোনও "রিসেট" নেই: অ্যারের অভ্যন্তরীণ পয়েন্টারে কোনও পরিবর্তন নেই ...
জে ব্রুনি

6
খুব মার্জিত সমাধান, তবে অ্যারে খালি থাকলে একটি E_NOTICE নিক্ষেপ করে।
টিজিআর

1
@ মাইকে হ্যাঁ, তবে এটি আর মার্জিত নয় :)
টিজিআর

13
এটা কি ভুল না ?! এটি কেবল তখনই কাজ করে যদি অ্যারে কীগুলি হয় int, চেষ্টা করুন list($firstItem) = array('key1' => 'value1');এবং আপনি একটি ত্রুটি পাবেনNotice: Undefined offset: 0
মার্কো ডেমাইও

12
স্পষ্ট করার জন্য: list($x) = foo();সমতুল্য $x = foo()[0];। নোট করুন যে এটি অগত্যা "প্রথম আইটেমটি পান" সমান নয়, যেহেতু কোনও পূর্ণসংখ্যার সাথে সূচকযুক্ত অ্যারেতেও কী-এর সাথে উপাদান থাকতে পারে না my আমার ক্ষেত্রে আমি "তালিকা" ($ ক্রম) = get_order ($ ব্যবহারকারী) করছিলাম ; " তবে "গেট_র্ডার" তাদের আইডি দ্বারা চালিত আদেশগুলি ফিরিয়ে দিচ্ছিল, যা সাধারণত 0 হয় না @ @ সার্জি বলেছেন, অ্যারে_ভ্যালুগুলি () এটি ঠিক করে, তবে কোডটির দক্ষতা এবং (আরও গুরুত্বপূর্ণভাবে) পঠনযোগ্যতা থেকে বিরত।
ওয়ারবো

55

পিএইচপি 5.4+:

array_values($array)[0];

এটি সর্বদা সর্বশ্রেষ্ঠ এবং দুর্দান্ততম চালিত শীতল লোকদের জন্য। ;)
জেনেক্সার

1
আমি এপ্রিলে যুক্ত হওয়া আমার উত্তরটি অন্তর্ভুক্ত করতে তিনি অক্টোবর -2013 সালে তাঁর উত্তর সম্পাদনা করেছিলেন।
সমীর আতা

পিএইচপি 4:$array_values = array_values($array); $value = $array_values[0];
zdick

38

পিএইচপি 7.3 মূল অ্যারে পরিবর্তন না করে এবং কোনও অস্থায়ী অবজেক্ট তৈরি না করে সরাসরি অ্যারের প্রথম এবং শেষ কী পাওয়ার জন্য দুটি ফাংশন যুক্ত করেছে :

শব্দার্থগত অর্থবোধক হওয়া ছাড়াও এই ফাংশনগুলি অ্যারে পয়েন্টারটিকেও স্থানান্তরিত করে না as foreach করবে)।

কীগুলি থাকার পরে, কেউ সরাসরি কীগুলি দ্বারা মানগুলি পেতে পারে।


উদাহরণ (তাদের সকলের পিএইচপি 7.3+ প্রয়োজন)

প্রথম / শেষ কী এবং মান পাওয়া:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];

ওয়ান-লাইনার হিসাবে প্রথম / শেষ মান প্রাপ্তি অ্যারেটি খালি থাকতে পারে না এই ধারণা করে :

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

ওয়ান-লাইনার হিসাবে প্রথম / শেষ মানটি খালি অ্যারেগুলির জন্য ডিফল্ট হিসাবে পাওয়া:

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];

সঙ্গে কমান নাল-কোয়ালেসিং অপারেটর , সাধারণত নাল ডিফল্ট তাই হয়: $first_value = $my_array[array_key_first($my_array)] ?? null;
মিচেল McKenna

29

ধরুন:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

শুধু ব্যবহার করুন:

$array[key($array)]

প্রথম উপাদান পেতে বা

key($array)

প্রথম চাবি পেতে।

অথবা আপনি যদি এটি মুছতে চান তবে আপনি প্রথমে লিঙ্কমুক্ত করতে পারেন।


9
currentতখন কি ব্যবহার করবেন না ?
মার্কো দেমাইও

27

কিছু অ্যারে ফাংশন পছন্দ সঙ্গে কাজ করে না list, resetবাcurrent । সম্ভবত তারা "ভুল" অ্যারে - উদাহরণস্বরূপ অ্যারেআইটারেটরকে আংশিকভাবে প্রয়োগ করছে।

আপনি যদি অ্যারের নির্বিশেষে প্রথম মানটি টানতে চান তবে আপনি একটি পুনরাবৃত্তকারীকে শর্ট সার্কিট করতে পারেন:

foreach($array_with_unknown_keys as $value) break;

আপনার মানটি তখন উপলব্ধ হবে $value হবে এবং প্রথম পুনরাবৃত্তির পরে লুপটি ভেঙে যাবে। এটি অ্যারে_উন্সফিটের (অ্যারে_ভ্যালুগুলি (r আরআর)) মতো কোনও কার্যক্রমে কোনও বৃহত অ্যারে অনুলিপি করার চেয়ে আরও দক্ষ efficient

আপনি কীটি এইভাবে দখল করতে পারেন:

foreach($array_with_unknown_keys as $key=>$value) break;

যদি আপনি কোনও ফাংশন থেকে এটি কল করে থাকেন তবে তাড়াতাড়ি ফিরে আসুন:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}

আমি মনে করি এটি একটি দ্রুততম উপায় কারণ ভাষা ব্যবহার করে ফাংশন কল (যা আরও ব্যয়বহুল) এর চেয়ে পূর্বাভাস নির্মাণ করে। designcise.com/web/tutorial/…
ইলাদার আমানকুলভ

19

থেকে Laravel পথে সাহায্যকারী :

function head($array)
{
    return reset($array);
}

অ্যারেটি ফাংশনে মান দ্বারা প্রেরণ করা হচ্ছে, রিসেট () অ্যারের অনুলিপিটির অভ্যন্তরীণ পয়েন্টারকে প্রভাবিত করে এবং এটি মূল অ্যারেটিকে স্পর্শ করে না (এটি ফিরে আসুন নোট করুন)false অ্যারেটি খালি থাকলে )।

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

$data = ['foo', 'bar', 'baz'];

current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz

এছাড়াও, এখানে একটি বিকল্প। এটি খুব সামান্য দ্রুত, তবে আরও আকর্ষণীয়। অ্যারেটি খালি থাকলে এটি সহজেই ডিফল্ট মান পরিবর্তন করতে দেয়:

function head($array, $default = null)
{
    foreach ($array as $item) {
        return $item;
    }
    return $default;
}

রেকর্ডের জন্য, অ্যারের শেষ উপাদানটির জন্য আমার এখানে আরও একটি উত্তর


17

এই সহজ রাখুন! এখানে অনেকগুলি সঠিক উত্তর রয়েছে তবে সমস্ত বিভ্রান্তি হ্রাস করতে এই দুটি কাজ করে এবং প্রচুর ওভারহেড হ্রাস করে:

key($array)একটি অ্যারের প্রথম কী
current($array)পায় একটি অ্যারের প্রথম মান পায়


সম্পাদনা:
নীচের মন্তব্য সম্পর্কিত। নিম্নলিখিত উদাহরণ আউটপুট হবে:string(13) "PHP code test"

$array = array
(
   '1'           => 'PHP code test',  
   'foo'         => 'bar', 5 , 5 => 89009, 
   'case'        => 'Random Stuff: '.rand(100,999),
   'PHP Version' => phpversion(),
   0             => 'ending text here'
);

var_dump(current($array));

11
Uhh। currentবর্তমান উপাদান সমান। আপনাকে পয়েন্টারটি অ্যারের শুরুতে পুনরায় সেট করতে হবে এটি নিশ্চিত করার জন্য এটি আসলে শুরুতে রয়েছে।
ওয়াটারলুম্যাট

বর্তমান () প্রথম উপাদানটি নয়, বর্তমান উপাদান পাবে। এটা ভিন্ন.
আমিরহোসেইন টারমাস্ট

অ্যারেতে কেবল একটি উপাদান থাকলে স্রোত কাজ করবে।
জমির ফুজান


13

আমি করতাম echo current($array)


1
@hsz কিছু যায় current()আসে না , রেফারেন্সগুলি পাস করার পরে ত্রুটি হয় না। প্রদত্ত যে পয়েন্টারটি এখনও শুরুতে এটি কাজ করে।
ড্যান লাগেজ

তবে এটি এমন একটি নোটিশ তৈরি করে যা আপনার লগগুলি নোংরা এবং ভাল করে দেয় ... আপনি যদি বিজ্ঞপ্তিগুলি সমালোচিত না হন তবে আপনারও এড়ানো উচিত
dmikam

1
@dmikam না এটা হয় না। প্রকৃতপক্ষে reset"কেবল পরিবর্তনশীলগুলি রেফারেন্স দিয়ে পাস করা উচিত" উত্পন্ন করে তবে নোটিশটি পাওয়া যায় currentনা: অনলাইন পিএইচপি সম্পাদক এর উদাহরণcurrent(array_filter(...));
সিপিএইচপিথন

@ সিপিএইচপিথন, আপনি ঠিক বলেছেন বলে মনে হচ্ছে ... পিএইচপি 4 এর পুরানো কাল থেকে আমার বর্তমানের এই ধারণাটি ছিল যেখানে এটি সত্যিই মারাত্মক ত্রুটি সৃষ্টি করে: স্যান্ডবক্স.অনলাইনপ্পফিউশনস / কোড / current কেবলমাত্র বর্তমানটি ব্যবহার করার ক্ষেত্রে আমি দেখতে পাচ্ছি যে এটি গ্যারান্টি দেয় না যে প্রত্যাবর্তিত উপাদানটি অ্যারের প্রথম উপাদান (অভ্যন্তরীণ পয়েন্টারটি ডাকা ফাংশন দ্বারা সংশোধন করা যেতে পারে)। কার্যত এটি কোনও অ্যারের এলোমেলো উপাদান ফিরে আসতে পারে।
dmikam

1
@ সিপিএইচপিথন কিছুটা কৃত্রিম উদাহরণ, তবে এটি আমার চিন্তাভাবনাগুলি ভালভাবে প্রমাণ করে: স্যান্ডবক্স.অনলাইনফ্পফিউশনস / কোড / just শুধু কল্পনা করুন যে আপনি ব্যবহার করছেন এমন কোনও ফাংশন next(), end()বা অ্যারের অভ্যন্তরীণ পয়েন্টারকে সংশোধনকারী অন্য কোনও ফাংশন থেকে আপনার অ্যারে পেয়েছেন । আমার উদাহরণে, current()নাল ফেরায় কারণ অভ্যন্তরীণ পয়েন্টার অ্যারের "সীমার বাইরে"। তবে এটি 'ভার্চুয়াল' কোনও / এলোমেলো উপাদানগুলিকেও নির্দেশ করতে পারে।
dmikam

12
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

আউটপুট:

apple

10
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);

// The first element of your array is:
echo $myArray[$arrayKeys[0]];

আমি গ্রহণযোগ্য উত্তরে বর্ণিত পথে যাইনি। আপনার ধন্যবাদ ব্যবহৃত হয়েছে
জয়কান্দারি

9
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

$firstValue = each($array)[1];

এই অনেক অধিক কার্যকরী হয় array_values()কারণ each()ফাংশন সম্পূর্ণ অ্যারে কপি নেই।

আরও তথ্যের জন্য দেখুন http://www.php.net/manual/en/function.each.php


because the each() function does not copy the entire array.+1

2
তবে জিনিসটি হ'ল আগে আপনার একটি পুনরায় সেট করা উচিত, যদি অভ্যন্তরীণ পয়েন্টার শুরুতে না হয় আপনি প্রথম উপাদানটি পেতে যাচ্ছেন না।
কার্লোস গস

তবে প্রত্যেকে () রেফারেন্স সহ একটি অ্যারে গ্রহণ করে এবং প্রাথমিক প্রশ্নের প্রয়োজনীয়তা এটি করা উচিত নয়
dmikam

8

একটি ক্লডগি উপায়:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);

3
কমপক্ষে আপনি সৎ - এটি ক্লডজি! তবে, এটি কাজ করে এবং উপরের তালিকা () কৌশলটি শেখার আগে পর্যন্ত আমি এটি ব্যবহার করেছি।
এলোমেলো_উজার_নাম

1
আপনি যদি এটি করছেন, আপনি পাশাপাশি reset()অ্যারে পয়েন্টারটিকে পুনরায় সেট করার পরেও ব্যবহার করতে পারেন foreachany
টাইজয়েড

7

প্রথম উপাদান পান:

array_values($arr)[0]

শেষ উপাদান পান

array_reverse($arr)[0]

সংখ্যাযুক্ত কীগুলি অ্যারে_রেভারের সাথে সংরক্ষিত থাকে, যাতে এখনও প্রথম উপাদানটি ফিরে আসবে। 3v4l.org/2729s
হবেন না

7

এর বেশিরভাগ কাজ! কিন্তু একটি দ্রুত একক লাইন (নিম্ন সংস্থান) কলের জন্য:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)

যদিও এটি কাজ করে এবং শালীনভাবে ভাল, দয়া করে আমার অতিরিক্ত উত্তরটিও দেখুন: https://stackoverflow.com/a/48410351/1804013


5
এটি ব্যবহারের সমতুল্য current($array), যার জন্য অ্যারের অভ্যন্তরীণ পয়েন্টারটি যে কোনও উপায়ে প্রথম এলিমেন্টে থাকা দরকার, এই ক্ষেত্রে, echo reset($array)সবচেয়ে উপযুক্ত।
টাইজয়েড

@ টাইজয়েড তিনি আপনার পরামর্শের সাথে এখানে অন্য একটি উত্তর লিখেছিলেন তবে তিনি আপনার ব্যাখ্যাটি বাদ দিয়েছেন ... ধন্যবাদ
সিপিএইচপিথন

: @Tyzoid: আমি তৈরি একটি অতিরিক্ত উত্তর / আপডেট অল্প সময়ের যেতে stackoverflow.com/a/48410351/1804013
tfont

5

আমি মনে করি অ্যারে_ভ্যালুগুলি ব্যবহার করা এখানে আপনার সেরা বাজি হবে। 'আপেল' পেতে ফাংশনের ফলাফল থেকে আপনি সূচক শূন্যের মানটি ফিরিয়ে দিতে পারেন।


5

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

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

সমস্ত বর্তমান সমাধানগুলির জন্য ধন্যবাদ আমাকে এই উত্তর পেতে সাহায্য করেছে, আমি আশা করি এটি কারওর মাঝে সহায়তা করবে!


4

ব্যবহার করুন:

$first = array_slice($array, 0, 1);  
$val= $first[0];

ডিফল্টরূপে, array_sliceকীগুলি সংরক্ষণ করে না, তাই আমরা নিরাপদে শূন্যটিকে সূচক হিসাবে ব্যবহার করতে পারি।


4

আপনার জন্য দুটি সমাধান।

সমাধান 1 - কেবল কীটি ব্যবহার করুন। আপনি বলেন নি যে আপনি এটি ব্যবহার করতে পারবেন না। :)

<?php
    // Get the first element of this array.
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

    // Gets the first element by key
    $result = $array[4];

    // Expected result: string apple
    assert('$result === "apple" /* Expected result: string apple. */');
?>

সমাধান 2 - অ্যারে_ফ্লিপ () + কী ()

<?php
    // Get first element of this array. Expected result: string apple
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

    // Turn values to keys
    $array = array_flip($array);

    // You might thrown a reset in just to make sure
    // that the array pointer is at the first element.
    // Also, reset returns the first element.
    // reset($myArray);

    // Return the first key
    $firstKey = key($array);

    assert('$firstKey === "apple" /* Expected result: string apple. */');
?>

সমাধান 3 - অ্যারে_কিগুলি ()

echo $array[array_keys($array)[0]];

2

এটি বাস্তব বিশ্বে এত সহজ প্রতিক্রিয়া নয়। মনে করুন আমাদের কাছে সম্ভাব্য প্রতিক্রিয়ার এই উদাহরণ রয়েছে যা আপনি কয়েকটি লাইব্রেরিতে খুঁজে পেতে পারেন।

$array1 = array();
$array2 = array(1,2,3,4);
$array3 = array('hello'=>'world', 'foo'=>'bar');
$array4 = null;

var_dump('reset1', reset($array1));
var_dump('reset2', reset($array2));
var_dump('reset3', reset($array3));
var_dump('reset4', reset($array4)); // Warning

var_dump('array_shift1', array_shift($array1));
var_dump('array_shift2', array_shift($array2));
var_dump('array_shift3', array_shift($array3));
var_dump('array_shift4', array_shift($array4)); // Warning

var_dump('each1', each($array1));
var_dump('each2', each($array2));
var_dump('each3', each($array3));
var_dump('each4', each($array4)); // Warning

var_dump('array_values1', array_values($array1)[0]); // Notice
var_dump('array_values2', array_values($array2)[0]);
var_dump('array_values3', array_values($array3)[0]);
var_dump('array_values4', array_values($array4)[0]); // Warning

var_dump('array_slice1', array_slice($array1, 0, 1));
var_dump('array_slice2', array_slice($array2, 0, 1));
var_dump('array_slice3', array_slice($array3, 0, 1));
var_dump('array_slice4', array_slice($array4, 0, 1)); // Warning

list($elm) = $array1; // Notice
var_dump($elm);
list($elm) = $array2;
var_dump($elm);
list($elm) = $array3; // Notice
var_dump($elm);
list($elm) = $array4;
var_dump($elm);

আপনারা দেখতে পাচ্ছেন, আমাদের বেশ কয়েকটি 'এক লাইন' সমাধান রয়েছে যা কিছু ক্ষেত্রে ভাল কাজ করে তবে সমস্ত ক্ষেত্রে তা নয়।

আমার মতে, আপনার কেবলমাত্র অ্যারে দিয়ে সেই হ্যান্ডলারটি থাকা উচিত।

এখন পারফরম্যান্সের কথা বলছি, ধরে নিই যে আমাদের সবসময় অ্যারে রয়েছে, এরকম:

$elm = empty($array) ? null : ...($array);

...you would use without errors:
$array[count($array)-1];
array_shift
reset
array_values
array_slice

array_shiftদ্রুত চেয়ে reset, এবং এই তিনটি দ্রুত তুলনায় - আরো দ্রুত যে এর চেয়ে [1 গণনা ()], array_valuesএবং array_slice


2

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

যদি তা হয় তবে এখানে বর্ণিত প্রায় সমস্ত উপায়ে এই বার্তাটি পাবেন ... এবং তাদের মধ্যে কিছু অতিরিক্ত অ্যারে (বা এর কিছু অংশ) নকল করে অতিরিক্ত মেমরি ব্যবহার করে। এটি এড়ানোর একটি সহজ উপায় হ'ল এই ফাংশনগুলির মধ্যে যে কোনওটিকে কল করার আগে কেবল মূল্য ইনলাইন বরাদ্দ করা:

$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());

এইভাবে আপনি পর্দায় বা লগগুলিতে স্ট্র্যাক্ট বার্তা পাবেন না এবং আপনি কোনও অতিরিক্ত অ্যারে তৈরি করবেন না। এটি ইনডেক্সড এবং এসোসিয়েটিভ অ্যারে উভয়ের সাথেই কাজ করে।


1

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

list($x) = some_array();
var_dump($x);

উপরেরটি existing x এর যে কোনও বিদ্যমান মানকে ওভাররাইট করবে এবং এই সুযোগটি সক্রিয় থাকাকালীন this x ভেরিয়েবল প্রায় স্থির থাকবে (এই ফাংশন / পদ্ধতির সমাপ্তি বা চিরকাল আমরা যদি শীর্ষ-স্তরের আছি)। এটি কল_ইউজার_ফুনক এবং একটি বেনামি ফাংশন ব্যবহার করে কাজ করা যেতে পারে তবে এটি আড়ষ্ট:

var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
                        some_array()));

যদি আমরা এর মতো বেনাম ফাংশন ব্যবহার করি তবে আমরা পাস-বাই-রেফারেন্স ব্যবহার করেও রিসেট এবং অ্যারে_শিফ্টের সাথে প্রকৃতপক্ষে চলে যেতে পারি। কারণ কোনও ফাংশন কল করা তার আর্গুমেন্টগুলিকে আবদ্ধ করবে এবং এই আর্গুমেন্টগুলি রেফারেন্স দ্বারা পাস করা যেতে পারে:

var_dump(call_user_func(function($arr) { return reset($arr); },
                        array_values(some_array())));

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

var_dump(call_user_func('reset', array_values(some_array())));

1

সরফরাজ যা পোস্ট করেছেন তার একটি ছোট্ট পরিবর্তন:

$array = array(1, 2, 3, 4, 5);
$output = array_slice($array, 0, 1);
print_r ($output);

1

আমি অ্যারের অভ্যন্তরীণ পয়েন্টারটির সাথে ফিডিং পছন্দ করি না তবে এটি দিয়ে array_keys()বা দ্বিতীয় অ্যারে তৈরি করাও অক্ষম array_values(), তাই আমি সাধারণত এটি সংজ্ঞায়িত করি:

function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}

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