পিএইচপি-তে অ্যারে শুরু করার সর্বোত্তম উপায় (খালি)


297

নির্দিষ্ট কিছু ভাষায় (উদাহরণস্বরূপ এএস 3) এটি লক্ষ্য করা গেছে যে অবজেক্ট তৈরি এবং তাত্ক্ষণিক কারণে var foo = []নয় বরং যদি এটি করা হয় তবে নতুন অ্যারে শুরু করা দ্রুততর হয় var foo = new Array()। আমি ভাবছি পিএইচপি-তে কোনও সমতা আছে কিনা?

class Foo {
    private $arr = array(); // is there another / better way?
}

11
আমি এটাই করি।
ম্যাথু

2
যারা উত্তর দিয়েছেন (এবং এত তাড়াতাড়ি!) সবাইকে ধন্যবাদ। আমাকে নির্বিচারে একটি উত্তর নির্বাচন করতে হয়েছিল যাতে অ্যান্ডির মনে হয় সবচেয়ে গভীরতা রয়েছে।
টম অাগার

1
এই প্রশ্নটি অনেক সাহায্য করে
হিতেশ

চেষ্টা করবেন array_fill? php.net/manual/en/function.array-fill.php
zx1986

2
@ zx1986 এটি খালি অ্যারে তৈরির জন্য বেশ জটিল umbers অবশ্যই অপি থেকে কম $arr = array()বা$arr = []
টম অগার

উত্তর:


189

ECMAScript প্রয়োগসমূহে (উদাহরণস্বরূপ, অ্যাকশনস্ক্রিপ্ট বা জাভাস্ক্রিপ্ট), Array()এটি একটি নির্মাণকারী ফাংশন এবং[] অ্যারে আক্ষরিক ব্যাকরণের অংশ। উভয়ই পুরোপুরি ভিন্ন উপায়ে অপ্টিমাইজড এবং কার্যকর করা হয়, আক্ষরিক ব্যাকরণটি কোনও ক্রিয়াকলাপের ডাক দেওয়ার ওভারহেড দ্বারা ক্রেজিড হয় না।

অন্যদিকে, পিএইচপি-তে এমন ভাষা রচনা রয়েছে যা ফাংশনগুলির মতো দেখতে পারে তবে তাদের মতো ব্যবহার করা হয় না। এমনকি পিএইচপি 5.4 এর সাথে, যা []বিকল্প হিসাবে সমর্থন করে , ওভারহেডে কোনও পার্থক্য নেই কারণ, সংকলক / পার্সারের যতদূর, তারা সম্পূর্ণ সমার্থক।

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

আপনার যদি পিএইচপি-র পুরানো সংস্করণগুলি সমর্থন করার দরকার হয় তবে পূর্বের সিনট্যাক্সটি ব্যবহার করুন। পঠনযোগ্যতার জন্য একটি যুক্তিও রয়েছে তবে দীর্ঘকালীন জেএস বিকাশকারী হওয়ায় আমার কাছে এটি পরে স্বাভাবিক মনে হয়। আমি []যখন প্রথম পিএইচপি শিখছিলাম তখন ব্যবহার করে অ্যারেগুলি শুরু করার চেষ্টা করার ক্ষেত্রে আমি ভুল করেছিলাম।

ভাষায় এই পরিবর্তনটি মূলত নিম্নলিখিত কারণগুলির সাথে মূল বিকাশকারীদের বিপক্ষে সংখ্যাগরিষ্ঠ ভোটের কারণে প্রস্তাবিত এবং প্রত্যাখ্যান করা হয়েছিল:

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

যাইহোক, এটি উপস্থিত হয় 5.4 অবধি হৃদয় পরিবর্তন ছিল, সম্ভবত মঙ্গোডিবি (যা ECMAScript সিনট্যাক্স ব্যবহার করে) এর মতো জনপ্রিয় ডাটাবেসের সমর্থনের বাস্তবায়ন দ্বারা প্রভাবিত হয়েছে।


51
সম্ভবত 5.4 এর পরিবর্তনটি করা হয়েছিল কারণ যারা লোকেরা "যা" ভোটদানের প্রক্রিয়াটি গ্রহণ করেছিল :)
রব গ্রান্ট

40
আমি পছন্দ করি $array = [];যেহেতু এটি জেএস এবং পিএইচপি এর মধ্যে পিছনে যাওয়া সহজ করে তোলে।
জাস্টিন

সুতরাং $array = []; ভাল বিকল্প ??? অথবা আমি অন্য একটি চেষ্টা করা উচিত। কোনটি আরও ভাল
হিতেশ

2
@ হিটেশ: এটি ব্যক্তিগত পছন্দের বিষয়। এগুলি উভয়ই কার্যকরভাবে একই, []টাইপ করা একটু সহজ।
অ্যান্ডি ই

7
[]] সিনট্যাক্সটি সর্বজনীনভাবে পছন্দসই বলে মনে হচ্ছে, তবে এটি লক্ষ্য করা গুরুত্বপূর্ণ যে সেখানে এখনও প্রচুর সংখ্যক হোস্ট একচেটিয়াভাবে 5.3 ব্যবহার করছে। আপনি যদি নিজের কোডটি বিতরণ করতে চান তবে [] সিনট্যাক্স মারাত্মক হবে।
ইত্যাদি

204
$myArray = []; 

খালি অ্যারে তৈরি করে।

আপনি পরে অ্যারেতে মানগুলি ঠেলাতে পারেন:

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

এই মুহুর্তে, $ মাইআরেতে "গাছ", "বাড়ি" এবং "কুকুর" রয়েছে। উপরের প্রতিটি কমান্ড অ্যারেতে যুক্ত হয়েছে, ইতিমধ্যে সেখানে থাকা আইটেমগুলি সংরক্ষণ করে।

অন্যান্য ভাষা থেকে এসেছেন, অ্যারেতে যুক্ত করার এই উপায়টি আমার কাছে অদ্ভুত বলে মনে হয়েছিল। আমি $ myArray + = "কুকুর" বা কিছু ... বা ভিজুয়াল বেসিক সংগ্রহগুলির মতো একটি "অ্যাড ()" পদ্ধতি থাকতে পারে এমন কিছু করার আশা করছিলাম। তবে এই সরাসরি সংযোজন বাক্য গঠন অবশ্যই সংক্ষিপ্ত এবং সুবিধাজনক।

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

unset($myArray[1]); 

... অ্যারে থেকে "বাড়ি" সরিয়ে ফেলবে (অ্যারেগুলি শূন্য-ভিত্তিক)।

unset($myArray); 

... পুরো অ্যারে ধ্বংস করবে।

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

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

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

সুতরাং আপনি যদি এটি করেন:

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

... আইটেম "কুকুর" 21 এর একটি সূচক নম্বর দেওয়া হবে PH পিএইচপি বর্ধিত সূচী কার্যভারের জন্য বুদ্ধিমান প্যাটার্ন মেলে না, সুতরাং এটি জেনে যাবে না যে আপনি এটি "কুকুরের 30" তালিকা নির্ধারণ করতে চেয়েছিলেন "। আপনি অ্যারের জন্য বৃদ্ধি প্যাটার্ন নির্দিষ্ট করতে অন্যান্য ফাংশন ব্যবহার করতে পারেন। আমি এখানে won'tুকব না, তবে এটি পিএইচপি ডক্সে রয়েছে।

চিয়ার্স,

- = ক্যামেরন


6
এটি লক্ষণীয় গুরুত্বপূর্ণ যে $ আরি = [] কেবল পিএইচপি 5.4 পোস্টে কাজ করে। পারফরম্যান্সের দৃষ্টিকোণ থেকে তবে [] বনাম অ্যারে () এর কোনও সুবিধা নেই।
টম অগার 8'15

1
পূর্ববর্তী সংস্করণগুলির জন্য আপনি অ্যারে_পশ () w3schools.com/php/func_array_push.asp ব্যবহার করতে পারেন এর সাথে কোনও পারফরম্যান্স হিট আছে কিনা তা আমি জানি না।
চিহ্নিত করুন

3
আপনি @ টমআউজারের পয়েন্ট @ মার্ককে ভুল বুঝেছেন। $array[] = 'foo'পিএইচপি এর পুরানো সংস্করণে ঠিক কাজ করে fine এটি কেবলমাত্র $array = [];একটি অ্যারে সূচনা করতে হবে যা 5.4-এ নতুন।
কোডমনকি

সত্যি কথা বলতে গেলে এটি আসলে ওপি-র প্রশ্নের উত্তর দেয়।
স্মিট্টি

হ্যাঁ ... মন ফুঁকছে পিএইচপি এর দশক এবং আমি কেবল শিখছি আপনার অ্যারে_পুষ্পের দরকার নেই।
ব্যাংককিয়ান

61

পিএইচপি 5.4 এর আগে:

$myArray = array();

পিএইচপি 5.4 এবং উচ্চতর

$myArray = [];

এবং কীভাবে আমরা পিএইচপি 5.4 বা তার বেশি ব্যবহার করে বহুমাত্রিক অ্যারে তৈরি করতে পারি?
সিরাজ আলম

26

পিএইচপি-তে একটি অ্যারে হয়; কোনও আদিম বনাম বস্তু বিবেচনা নেই, সুতরাং তুলনামূলক অপ্টিমাইজেশন হওয়ার দরকার নেই।


1
সেরা উত্তর আইএমও: বিভিন্ন বাক্য গঠন রয়েছে তবে পারফরম্যান্সের ক্ষেত্রে সেগুলি সব একই।
ম্যাথিউ নাপোলি

1
উভয়ের জন্যই কি পারফরম্যান্স ইস্যু জড়িত আছে .. আমি কোথাও এই সম্পর্কে .. কোনও লিঙ্ক বা ডক পরীক্ষা করতে পারি
হিতেশ

2
ফলস্বরূপ, আপনি নিশ্চিত হন যে আপনার কোডটি কখনই 5.4 প্রাক পরিবেশে চলবে না, $ অ্যারে = নতুন অ্যারে () ব্যবহার করুন
টম অাগার

20

আপনি যা করছেন তা 100% সঠিক।

সুন্দর নামকরণের ক্ষেত্রে এটি প্রায়শই করা হয়ে থাকে যে প্রাইভেট / সুরক্ষিত সম্পত্তিগুলির পূর্বে একটি আন্ডারস্কোর দিয়ে দেওয়া হয় যাতে এটি প্রকাশ্য হয় না। যেমন private $_arr = array()বাpublic $arr = array()


2
পিএইচপি-তে, আমি মনে করি যে তাদের নাম একটি আন্ডারস্কোর দিয়ে না রাখাই ভাল কারণ আপনি সর্বদা $thisমান পেতে ব্যবহার করেন এবং কখনও কখনও জনসাধারণের সম্পত্তি ব্যবহার করবেন না।
meze

1
@ মাইজ করুন আপনি তাদের মত $this->arrএবং অ্যাক্সেস করতে চাই $this->_arr। আপনি কখনই জনসাধারণের সম্পত্তি ব্যবহার করবেন না ?!
জেমস সি

5

এটা চেষ্টা কর:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }

4
কিন্ডা দুর্দান্ত, তবে একটি সত্যই কার্যকর কোডিং প্যাটার্নের চেয়ে পার্টির কৌশল হিসাবে বেশি, আপনি কি ভাবেন না?
টম অগার

আপনি যদি প্রোপার্টি প্যাটার্ন সহ কোনও অ্যারেতে আপনার অ্যারে তৈরি করতে চান এবং এটি শেষে অ্যারেতে রূপান্তর করতে চান তবে দরকারী হতে পারে।
জোমার সেভিলজো

4

নেই অন্য কোন উপায় তাই এই ভাল হয়।

সম্পাদনা করুন: এই উত্তরটি পিএইচপি ৫.৪ এবং তার থেকে উচ্চতর থেকে বৈধ নয়।


এটি আর হয় না, 5.4 অ্যারেগুলির জন্য শর্টহ্যান্ড সিনট্যাক্স প্রবর্তন করে।
অ্যান্ডি ই

13
@ মোটিস কেন এতটা ঘৃণা করে: '(? একপাশে মজা করে, আমি পুরানো উত্তরটিকে "আঘাত করে" আরও স্পষ্ট করে তুলেছি new উত্তরটি পরিবর্তিত হয়েছে তা বুঝতে কোনও নবজাতকের পক্ষে এটি এখনও কার্যকর হতে পারে
ম্যাথিউ ন্যাপোলি

@ মোটিস লোকেদের মুছে ফেলা হলে লোকেরা উত্তরটি থেকে লাভটি হারাবে। এটি সম্পাদনা করা ভাল।
mbomb007

4

একটি সাধারণ অ্যারে শুরু করা:

<?php $array1=array(10,20,30,40,50); ?>

অ্যারের মধ্যে অ্যারে শুরু করা:

<?php  $array2=array(6,"santosh","rahul",array("x","y","z")); ?>

উত্স: কোডের জন্য জাদু


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