আমি কীভাবে একটি দ্বিমাত্রিক অ্যারে ঘোষণা করব?


92

2 ডি অ্যারে তৈরির সবচেয়ে সহজ উপায় কী। আমি এই জাতীয় কিছু করতে সক্ষম হবে আশা করি:

declare int d[0..m, 0..n]

উত্তর:


81

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

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => 'jane@example.com'
    ),
);

যা সমান

$array = array();

$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';

$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';

4
লুপিং স্টেটমেন্ট ব্যবহার করে আমরা কীভাবে একই অ্যারে তৈরি করতে পারি?
অনুপ পিট

@ আনুপ-পিট দ্বিতীয় স্নিপেটে দুটি পুনরাবৃত্তিকারী ব্লক লুপে এবং সংখ্যার সূচককে প্রতিস্থাপনের পরিবর্তিত একটি ভেরিয়েবল দ্বারা প্রতিস্থাপন করা হবে।
অটলি

4
@ অনুপপিট: এর জন্য ($ i = 0; $ i <গণনা ($ অ্যারে); $ i ++) {মুদ্রণ ($ অ্যারে [$ i] ['নাম']); }
ডেক্স

64

নিম্নলিখিতটি সমতুল্য এবং দ্বিমাত্রিক অ্যারে ফলাফল:

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

বা

$array = array();

$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);

7
এগুলি দ্বি-মাত্রিক অ্যারেতে ফল দেয় না, বরং অ্যারেগুলির অ্যারে তৈরি করে।
dotancohen

4
@ ডটানকোহেন এটি কেবল শব্দার্থক, সত্যই। ব্যবহারিকভাবে দুটি ধারণা একই। সেখানে প্রদর্শিত হয় এবং সি # এর মতো ভাষায় ব্যবহৃত বহু-মাত্রিক অ্যারেগুলির মধ্যে কেবলমাত্র পার্থক্য synt এবং এটিতে সিনট্যাক্সে মোটামুটি ছোট পার্থক্য।
আটলি

4
সি # তে কমপক্ষে, মেমরির প্রয়োজনীয়তাগুলি আলাদা। অ্যারেগুলির একটি অ্যারে প্রতিটি অ্যারের জন্য প্রয়োজনীয় মেমরির পরিমাণ বরাদ্দ করে। একটি দ্বি-মাত্রিক অ্যারে সম্পূর্ণ এন * এম মেমরির বরাদ্দ করে।
dotancohen

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

41

শুধু ঘোষণা? তোমার দরকার নেই। ভেরিয়েবলের উপস্থিতি নিশ্চিত করুন:

$d = array();

অ্যারেগুলি পরিবর্তনশীল আকারে পরিবর্তন করা হয় এবং অ-অযৌক্তিক উপাদানকে কিছু লেখার প্রয়াস এটি তৈরি করে (এবং প্রয়োজনে পুরো অ্যারে তৈরি করে)

$d[1][2] = 3;

এটি পূর্বের ঘোষণা ছাড়াই কোনও সংখ্যক মাত্রার জন্য বৈধ।


4
এটি ছাড়া মাত্রা সম্পর্কে আপনাকে কিছু না বলে। যদি আপনি কোনও এম x এন 2 ডি অ্যারে ঘোষণা করে থাকেন তবে সম্ভাবনাগুলি এটি একটি ম্যাট্রিক্স এবং যদি এটি একটি ম্যাট্রিক্সের সম্ভাবনা থাকে তবে আপনি গুণ বা তার উপর এমন কোনও কিছু করছেন যা উপাদানগুলির উপর পুনরাবৃত্তি প্রয়োজন, যা আপনি যদি এটি করতে না পারেন তবে "বিরল" এবং মাত্রা জানেন না।
ক্লিটাস

@ ক্লেটাস: আপনি countঠিক মত মাত্রায় ব্যবহার করতে পারেন , উদাহরণস্বরূপ count($d[1]), যদি না আমি আপনার বিষয়টিকে ভুল বুঝি?
অসন্তুষ্ট গোয়াট

4
তবুও, পিএইচপি-তে বহু-মাত্রিক অ্যারে নেই। সম্ভাবনাটি সর্বদা প্রস্থান করবে যে অ্যারেগুলির একটি অ্যারে বিরল হতে পারে। সুতরাং, অ্যারে ব্যবহার করে একটি ম্যাট্রিক্স প্রয়োগ করে এমন একটি ক্লাস তৈরির বিষয়ে কীভাবে অন্ততপক্ষে আপনি সঠিক প্রয়োগের আরও যত্ন নেবেন।
ডোন

27

প্রথমত, পিএইচপি-তে বহু-মাত্রিক অ্যারে নেই, এতে অ্যারে রয়েছে।

দ্বিতীয়ত, আপনি একটি ফাংশন লিখতে পারেন যা এটি করবে:

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}

4
আপনি "অ্যারে মানে না এর অ্যারে", "অ্যারে পরিবর্তে বা অ্যারে"?
আসফ

@ আসফ: হ্যাঁ আমি করেছি। স্থির। ধন্যবাদ
ক্লিটাস

4
শূন্যগুলির একটি অ্যারে স্থাপন করা সম্পূর্ণ অর্থহীন অনুশীলন। আপনার কোনও অ্যারে ঘোষণা করার দরকার নেই, কেবল এটি ব্যবহার করুন।
অসন্তুষ্ট গোয়াট

8
আপনি যদি এটির উপরে পুনরাবৃত্তি করতে চান বা এটির আকার নির্ধারণ করতে চান তবে আপনি ম্যাট্রিক্স গুণন করছেন। অ্যারে মানগুলি পূরণ করার জন্য একটি সঠিক বৈধ কেস রয়েছে।
ক্লিটাস

11

একটি সাধারণ জন্য, "আপনি যেমন যান তেমন পূরণ করুন" ধরণের সমাধান:

$foo = array(array());

এটি আপনাকে একটি নমনীয় সিউডো দ্বি-মাত্রিক অ্যারে পাবে যা hold foo [ n ] [ n ] ধরে রাখতে পারে যেখানে এন <= ∞ (অবশ্যই মেমরির আকারের স্বাভাবিক সীমাবদ্ধতার দ্বারা আপনার সীমিত তবে আপনি আশা করি ধারণাটি পাবেন)। এটি, তাত্ত্বিকভাবে, আপনার প্রয়োজন মতো আরও সাব অ্যারে তৈরি করতে বাড়ানো যেতে পারে।


9

বা বৃহত্তর অ্যারেগুলির জন্য, সমস্ত একই মান সহ:

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);

একটি তৈরি করবে $mদ্বারা $nসবকিছু সেট দিয়ে অ্যারের $value


3

যতদূর আমি অবগত রয়েছি এটি করার জন্য পিএইচপি ফাংশনটিতে কোনও বিল্ট নেই, আপনাকে এটি একটি লুপের মাধ্যমে বা একটি কাস্টম পদ্ধতির মাধ্যমে করতে হবে যা @ অ্যাম্বার দ্বারা উত্তরে অ্যারে_ফিলের মতো পুনরাবৃত্তভাবে ডাকে;

আমি ধরে নিচ্ছি আপনি বোঝাতে চাইছেন একটি খালি কিন্তু আন্তঃকরণযুক্ত অ্যারে তৈরি করা হয়েছে। উদাহরণস্বরূপ, আপনি 3 টি অ্যারের নীচের মতো চূড়ান্ত ফলাফল চান :

   $final_array = array(array(), array(), array());

এটি কেবল হাতের কোডের পক্ষে সহজ, তবে 3 টি অ্যারের 3 টি অ্যারের মতো একটি স্বেচ্ছাকৃতির আকারের অ্যারের জন্য এটি ব্যবহারের আগে আরম্ভ করতে জটিল হতে শুরু করে:

     $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));

... ইত্যাদি ...

আমি হতাশা পেয়েছি। ত্রুটিগুলি যাচাই বা ছোঁড়া ছাড়াই ব্যবহারের জন্য গভীরতার অ্যারেগুলির কোনও প্রাথমিক অ্যারে ঘোষণা করার সহজ উপায় থাকলে ভাল লাগবে।


3

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

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => 'jane@example.com'
    ),
);

foreach ( $array  as $groupid => $fields) {
    echo "hi element ". $groupid . "\n";
    echo ". name is ". $fields['name'] . "\n";
    echo ". email is ". $fields['email'] . "\n";
    $i = 0;
    foreach ($fields as $field) {
         echo ". field $i is ".$field . "\n";
        $i++;
    }
}

ফলাফল:

hi element 0
. name is John Doe
. email is john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com

2

এবং আমার জন্য একটি অ্যারে বিচ্ছিন্ন হওয়া উচিত কিনা সে সম্পর্কে যুক্তি প্রসঙ্গে নির্ভর করে।

উদাহরণস্বরূপ, যদি $ a [6] [9] জনবসতিপূর্ণ না হয় তবে $ a [6] [9] এর সমপরিমাণ উদাহরণস্বরূপ "" বা 0 দিয়ে পপুলেট হচ্ছে।


2
$r = array("arr1","arr2");

একক অ্যারে উপাদান প্রতিধ্বনিত করার জন্য আপনার লিখিত হওয়া উচিত:

echo $r[0];
echo $r[1];

আউটপুট হবে: arr1 arr2


4
এটি একটি মাত্রিক অ্যারে। একটি বহুমাত্রিক অ্যারে খুব কমপক্ষে, একটি অ্যারের মধ্যে একটি অ্যারে থাকে।
মাইক স্ট্রাটটন

2

এবং আমি এইভাবে পছন্দ করি:

$cars = array
  (
  array("Volvo",22),
  array("BMW",15),
  array("Saab",5),
  array("Land Rover",17)
  );

0

আপনি যদি একটি লাইনার ব্যবহার করে সাধারণ মানটির জন্য দ্রুত বহুমাত্রিক অ্যারে তৈরি করতে চান তবে আমি এই অ্যারে লাইব্রেরিটি এটি ব্যবহার করার জন্য এটি ব্যবহারের পরামর্শ দেব :

$array = Arr::setNestedElement([], '1.2.3', 'value');

যা উত্পাদন করবে

[
  1 => [
    2 => [
      3 => 'value'
    ]
  ]
]

0

আপনি এটি চেষ্টা করতে পারেন, তবে দ্বিতীয় মাত্রার মানগুলি সূচকগুলির সমান হবে:

$array = array_fill_keys(range(0,5), range(0,5));

খালি অ্যারের জন্য আরও কিছুটা জটিল:

$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));


0

আপনাকে অন্য অ্যারেতে অ্যারে ঘোষণা করতে হবে।

$arr = array(array(content), array(content));

উদাহরণ:

$arr = array(array(1,2,3), array(4,5,6));

অ্যারে থেকে প্রথম আইটেমটি পেতে, আপনি ব্যবহার করবেন $arr[0][0], এটি অ্যারে থেকে প্রথম অ্যারের প্রথম আইটেমের মতো । অ্যারে থেকে দ্বিতীয় অ্যারে থেকে $arr[1][0]প্রথম আইটেমটি ফিরিয়ে দেবে ।

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