পিএইচপি, $ অ্যারে [] = $ মান বা অ্যারে_পশ ($ অ্যারে, $ মান) এ ব্যবহার করার চেয়ে আরও ভাল কী?


113

অ্যারে সদস্য সংযুক্ত করার জন্য পিএইচপি-তে আরও কী ব্যবহার করা যায়,

$array[] = $value;

অথবা

array_push($array, $value);

?

যদিও ম্যানুয়াল বলছেন আপনি যদি একটি ফাংশন কল এড়াতে ভাল না করলে, আমিও পড়েছি $array[]অনেক ধীর চেয়ে array_push()। কিছু স্পষ্টতা বা মানদণ্ড কি কি?


2
$ myArray [] = 123; এটি অ্যারে_পুষ্প ফাংশনের চেয়ে দ্রুত হবে। এটি সরাসরি সেই অ্যারেতে মান যুক্ত করে। ফাংশনটিতে সেই ভেরিয়েবলগুলির জন্য পৃথক স্ট্যাক থাকে। এবং এটি যে ফাংশন ভিতরে যে বিবৃতি থাকতে পারে।
সান্নেশ

উত্তর:


150

কোনও মানদণ্ড নয়, তবে আমি ব্যক্তিগতভাবে দেখতে $array[]দেখতে ক্লিনার মতো মনে করি এবং সত্যিই মিলিসেকেন্ডের উপর চুল ভাগ করা বেশ অপ্রাসঙ্গিক, যদি না আপনি আপনার অ্যারে কয়েক হাজার স্ট্রিং যুক্ত করার পরিকল্পনা করেন।

সম্পাদনা করুন : এই কোডটি চালান:

$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    $array[] = $i;
}
print microtime(true) - $t;
print '<br>';
$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
print microtime(true) - $t;

ব্যবহারের প্রথম পদ্ধতিটি $array[]দ্বিতীয়টির চেয়ে প্রায় 50% দ্রুত।

কিছু মানদণ্ডের ফলাফল:

Run 1
0.0054171085357666 // array_push
0.0028800964355469 // array[]

Run 2
0.0054559707641602 // array_push
0.002892017364502 // array[]

Run 3
0.0055501461029053 // array_push
0.0028610229492188 // array[]

এই পিএইচপি ম্যানুয়াল হিসাবে নোট হিসাবে এটি আশ্চর্যজনক হওয়া উচিত নয়:

অ্যারেতে একটি উপাদান যুক্ত করতে যদি আপনি অ্যারে_পশ () ব্যবহার করেন তবে $ অ্যারে [] = ব্যবহার করা ভাল কারণ কারণ সেভাবে কোনও ফাংশন কল করার কোনও ওভারহেড নেই।

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


আমি কেবল সর্বদা দ্রুততম উপায়টি জানতে পছন্দ করি তাই যখন দিন আসবে তখন আমাকে একটি উচ্চ ট্র্যাফিক সাইট তৈরি করতে বলা হবে, আমার কিছুটা অন্তর্দৃষ্টি থাকবে। উত্তর করার জন্য ধন্যবাদ.
অ্যালেক্স

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

4
কেবল কোডটি আউটপুটটি $array[]মিলেছে বলে মনে করার জন্য, আমি যাচাই করেছিলাম যে সত্যিই অনেক দ্রুত, আমার মেশিনে 1 এম অ্যাসাইনমেন্টের জন্য 300ms বনাম 2000ms। তবে অ্যারে_পুষে একবারে 20 টি আইটেম যুক্ত করা প্রায় 20 টির মতো দ্রুত ছিল $array[] =
এলি

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

2
@ অলিস্টারবুলমান আমাকে অবশ্যই দৃ strongly়ভাবে একমত নন, বা কমপক্ষে আংশিকভাবে, যদি আপনি আরও ভাল জানেন তবে আরও ভাল লিখুন , তবে সম্ভাব্য মাইক্রো-অপ্টিমাইজেশনের সন্ধানে খুব বেশি প্রচেষ্টা করবেন না ...
jave.web

42

অ্যারে_পুষ্প () এর প্রধান ব্যবহার হ'ল আপনি অ্যারের শেষের দিকে একাধিক মান ঠেকাতে পারেন।

এটি ডকুমেন্টেশনে বলে :

অ্যারেতে একটি উপাদান যুক্ত করতে যদি আপনি অ্যারে_পশ () ব্যবহার করেন তবে $ অ্যারে [] = ব্যবহার করা ভাল কারণ কারণ সেভাবে কোনও ফাংশন কল করার কোনও ওভারহেড নেই।


29

পিএইচপি ডক্সarray_push থেকে এর জন্য :

দ্রষ্টব্য: আপনি যদি অ্যারে_পুষ্প () ব্যবহার করেন তবে অ্যারেতে একটি উপাদান যুক্ত করতে $ অ্যারে [] = ব্যবহার করা ভাল better কারণ সেই পদ্ধতিতে কোনও ফাংশন কল করার কোনও ওভারহেড নেই।


আপনার উত্তরটি প্রথমে কেমন ছিল তা মজার, তবে ভোটটি কম।
ডুডি

21

রাস্তায় শব্দটি হ'ল [] দ্রুত যা কারণ ফাংশন কলটির জন্য কোনও ওভারহেড নেই। এছাড়াও, পিএইচপি'র অ্যারে ফাংশনগুলি সত্যই কেউ পছন্দ করে না ...

"এটা কি ... খড়ের ছিদ্র, সুই .... বা এটি সুই খড়ের ছিদ্র ... আহ, চ *** এটি ... [] ="


7
তাই না? পিএইচপি এর অ্যারে ফাংশন দুর্দান্ত।
ক্লিটাস

13
কার্যকরভাবে তারা দুর্দান্ত, হ্যাঁ, তবে তিনি অসামঞ্জস্যপূর্ণ নামকরণের প্রকল্পের কথা উল্লেখ করেছিলেন।
রাইগুয়ে

2
আপনার আইডিইতে ইঙ্গিত দেওয়া প্যারামিটারটি চালু করা উচিত। তবে আমি একমত, কিছু ধারাবাহিকতা দুর্দান্ত ছিল।
পিম জাগার

4
আমি এই বিষয়ে একমত না। নামকরণের স্কিমে (x_y বা xy বা y_x ...) বা প্যারামিটার যুক্তিতেও কোনও ধারাবাহিকতা নেই (লক্ষ্য অবজেক্টটি প্রথম, শেষ, অ্যারে, স্ট্রিং এবং রিজেক্সপসের মধ্যে পাস করুন, একটি সাধারণ নিয়ম সন্ধান করার জন্য সৌভাগ্য!)।
e2-e4

3
এফডাব্লুআইডাব্লু, আমি সুই / খড়ের নাকের নামকরণের কনভেনশনটি পছন্দ করি এবং এটি মনে রাখা সহজ মনে হয়, যেমনটি এই
বাক্যটির

8

একটি পার্থক্য হ'ল আপনি দুটি বেশি পরামিতি সহ অ্যারে_পুষ () কল করতে পারেন, আপনি একবারে একাধিক উপাদানকে অ্যারেতে ঠেলাতে পারেন।

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);

কপি করে প্রিন্ট 1,2,3,4


2

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


2

যেহেতু " অ্যারে_পশ " একটি ফাংশন এবং এটি লুপের অভ্যন্তরে যখন একাধিকবার বলা হয় সুতরাং এটি স্ট্যাকের মধ্যে একটি মেমরি বরাদ্দ করবে। তবে যখন আমরা $ অ্যারে [] = $ মানটি ব্যবহার করি তখন আমরা কেবল অ্যারের মান নির্ধারণ করি।


1

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


0

যদিও প্রশ্ন কর্মক্ষমতা সম্পর্কে আরো ছিল, মানুষ ভাবছেন এটা ব্যবহার করা ভাল অভ্যাস এই প্রশ্নের আসবে array_pushবা $arr[]

ফাংশনটির অর্থ একাধিক মানের জন্য কম লাইনগুলি হতে পারে:

// 1 line:
array_push($arr, "Bob", "Steve");
// versus 2 lines:
$arr[] = "Bob";
$arr[] = "Steve";

তবে , array_push...

  • অ্যারে কীগুলি গ্রহণ করতে পারে না
  • সুই / খড়ের টুকরো নামকরণ কনভেনশনটি ভেঙে দেয়
  • ধীর, যেমন আলোচনা করা হয়েছে

আমি সঙ্গে স্টিকিং করা হবে $arr[]


0

আমি কেবল যুক্ত করতে int array_push(...)চাই না: অ্যারের ( পিএইচপি ডক ) উপাদানগুলির নতুন সংখ্যাটি ফিরিয়ে দিন । যা তুলনায় দরকারী এবং আরও কমপ্যাক্ট হতে পারে $myArray[] = ...; $total = count($myArray);

array_push(...)পরিবর্তনশীল স্ট্যাক হিসাবে ব্যবহৃত হয় যখন এছাড়াও অর্থবহ।

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