পিএইচপি-তে পূর্ণসংখ্যা সূচক দ্বারা একটি সাহসী অ্যারে অ্যাক্সেস করা


93

আমি কী / মান জোড়ার অ্যারে সূচকটি ব্যবহার করে একটি এসোসিয়েটিভ অ্যারের মান সেট করতে চাই। উদাহরণ স্বরূপ:

$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" );
$my_arr[1] = "not so much bling";  // Would change the value with key bling2.

কী স্ট্রিং ব্যবহার না করে এটি কীভাবে এটি সম্পাদন করা যায়?

উত্তর:


191

অ্যারে_কিগুলি ব্যবহার করুন ।

$keys = array_keys($my_arr);
$my_arr[$keys[1]] = "not so much bling";

আশাকরি এটা সাহায্য করবে.


4
পার্শ্ব নোট হিসাবে, পিএইচপি ডেভেলস কেন অ্যারে অ্যাক্সেস করার মতো অ-স্বজ্ঞাত উপায় তৈরি করবে?
মার্টি

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

4
আপনি একটি সহযোগী অ্যারে তৈরি করেন কারণ আপনি যা খুঁজছেন তা অ্যারের অবস্থানের চেয়ে গুরুত্বপূর্ণ। আমি মনে করি এটি একটি ভাল পয়েন্ট। বলুন আপনার কাছে শিক্ষার্থীদের নামের কী এবং ঠিকানা হিসাবে ঠিকানা হিসাবে মান রয়েছে। আপনি একটি ছাত্র এর ঠিকানা তার নাম পৌঁছে দিতে পারেন। অ্যারের অবস্থান এটি অপ্রাসঙ্গিক। এবং আপনি অ্যারে অনুসারে বাছাই করতে পারেন name of the student
ডোনভান

@ গর্ডন প্রযুক্তিগতভাবে এটি সত্য true তবে প্রোগ্রামার একটি স্ট্রিং নয়, একটি সংখ্যা সরবরাহ করছে। আমি মনে করি এটি এর অর্থ without using a key string
ডোনভান

4
@ অ্যালবার্ট আপনি এই নম্বরটি উপযুক্ত কী স্ট্রিংয়ের সাথে ম্যাপিং করছেন। array[1] === $array['foo']যদিও এর অর্থ এই নয়। অ্যারেতে অন্য মানটি থাকতে পারে $array[1]। মনে রাখবেন যে আমি আপনার সমাধানটি ভুল বলছি না। এটি ওপির ধারণা um
গর্ডন

27

সংখ্যাসূচক এবং সহযোগী সূচক কীগুলির মধ্যে কোনও সম্পর্ক নেই।

আপনি যখন বলেন যে আপনি কী / মানের অ্যারের সূচকটি ব্যবহার করে কোনও এসোসিয়েটিভ অ্যারের মান সেট করতে চান , তখন আপনাকে প্রদত্ত কীটি ব্যবহার করতে হবে, সেটিংস $array[1]সেটিংসের মতো নয় $array['foo']

এই অ্যারে বিবেচনা করুন

print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );

এই দেবে

Array
(
    [0] => foo
    [foo] => bar
    [1] => baz
    [some] => value
)

Foo অ্যারেতে দ্বিতীয় উপাদান। এটি অফসেট , তবে সূচক 1 এর সাথে এর কোনও যোগসূত্র নেই As আপনি দেখতে পাচ্ছেন, উপরের অ্যারেটিতে, সূচক 1 এর সাথে জড়িত baz। এটি অনুমান করা ভুল যে কেবলমাত্র fooপ্রথম সহকারী কী কারণ এটির আসল সংখ্যাসূচক কীটির সাথে কিছু করার আছে 1. ঠিক যেমন some2 এর সাথে সম্পর্কিত হয় না।

একইভাবে, উপরে দেখানো মত একটি মিশ্র অ্যারের জন্য, array_keysএই সাইটের অন্য কোথাও প্রস্তাবিত সমাধানটি কার্যকর হবে না, কারণ

print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );

দিতে হবে

Array
(
    [0] => 0
    [1] => foo
    [2] => 1
    [3] => some
)

সুতরাং যখন আপনি $array[$keys[1]]সত্যিই করছেন $array['foo']। তবে আপনি যদি সেই অ্যারেতে দ্বিতীয় সাহিত্যের মানটি অ্যাক্সেস করতে চান ( 'some'), আপনি এটি করতে পারবেন না $array[$keys[2]]কারণ এটি মূল্যায়ন করবে $array[1]এবং এটিই baz

কোনও উপাদানটির অফসেট এটির মূল বা মানটির সাথে সম্পূর্ণ সম্পর্কিত নয়

print_r(
    array(
        100    => 'foo',
        'foo'  => 'bar',
        50     => 'baz',
        'some' => 'value'
    )
);

সত্যিই মানে

Array
( //key       value     offset/position
    [100]  => foo       // 0
    [foo]  => bar       // 1
    [50]   => baz       // 2
    [some] => value     // 3
)

যার অর্থ অফসেট 0 এ থাকা উপাদানটি foo হয় যদিও এটি কীটি 100 টি you আপনি যদি অফসেটের সাহায্যে অ্যারে থেকে উপাদানগুলি বের করতে চান তবে আপনাকে ব্যবহার করতে হবে

$third = array_splice($array, 2, 1);
echo $third[0]; // baz

এটি তৃতীয় অবস্থানে কেবলমাত্র উপাদান রেখে একটি অ্যারে তৈরি করবে।

অথবা আপনি একটি ব্যবহার করতে পারে ArrayIteratorArrayIteratorকার্যকরী একটি Seekableইন্টারফেস আপনি যদি একটি নির্দিষ্ট অবস্থানে নেওয়া দেয় / অ্যারের মধ্যে অফসেট এবং তারপর আনা যে:

$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value

মাইনর নাইট: "আপনি যদি সেই অ্যারেতে (দ্বিতীয় কিছু) সম্মিলিত মান অ্যাক্সেস করতে চান তবে আপনি $ অ্যারে [$ কী [2]] করতে পারবেন না কারণ এটি $ অ্যারে [1] এ মূল্যায়ন করবে এবং এটি প্রযুক্তিগতভাবে, এটি কারণ সংখ্যাসূচক কীগুলি সহ সমস্ত কীগুলি সহযোগী কীগুলি হয় - 4 টি মান দিয়ে ফিরে আসে array_keys। "নন-অ্যাসোসিয়েটিভ কী" এর মতো কোনও সত্ত্বা নেই। যদি আপনি বোঝাতে চেয়েছিলেন যে আপনি ২ য় স্ট্রিং কীটি ফিরিয়ে আনতে পারবেন না (কী অ্যারেতে কেবল স্ট্রিং রয়েছে তা ধরে রেখে), তবে আপনি যা বলছেন তা সঠিক। $stringKeys = array_filter(array_keys($array), "is_string");স্ট্রিং কী দেয়।
টুলমেকারস্টেভ

17

যদিও array_keys()নবম কী অ্যাক্সেসের অনুমতি দেয়, array_valuesআপনাকে নবম মান দেবে।

<?php
$array = [
   0     => 'Zero',
   '1'   => 'One',
   'Two' => 'Two',
];
echo array_values($array)[2];
?>

'দুই' আউটপুট হবে।

একে অপরের ওপরে কি কোনও সুবিধা আছে? ঠিক আছে, আমি দেখতে পাচ্ছি একমাত্র নাবালক হ'ল অ্যারে অ্যাক্সেসের সংখ্যা।

সঙ্গে array_keys()আপনি 3 করা প্রয়োজন।

  1. ডেটা অ্যারে থেকে কীগুলি পান।
  2. কীগুলির তালিকা থেকে নবম কীটি পান।
  3. ডেটা অ্যারে থেকে নবম কী ব্যবহার করে মানটি পান।

সাথে array_values(), আপনার কেবল 2 টি দরকার।

  1. ডেটা অ্যারে থেকে মানগুলি পান।
  2. মানগুলির তালিকা থেকে নবম মানটি পান।

তবে, অন্যদিকে, কীগুলি সাধারণত ছোট থাকে এবং ডেটাগুলি প্রচুর পরিমাণে বাসা বাঁধতে পারে, সুতরাং ভারসাম্যটি ব্যবহার array_keys()করা সম্ভবত এটি নিরাপদ।


3

অ্যারে বড়, উভয় তাহলে array_keysএবং array_valuesযেহেতু তারা মূল হিসাবে একটি নতুন অ্যারে একই আকারের বরাদ্দ হবে, শুধু পেতে অযথা হতে হবে n তম কী (বা মূল্য)।

array_sliceএকটি পূর্ণসংখ্যা অফসেট গ্রহণ করে এবং মিশুক অ্যারেগুলিতে কাজ করে। অবিচ্ছিন্ন সময়ে আপনি নবম কীটি পেতে (এবং সেট করতে) এটি ব্যবহার করতে পারেন ।

// This will at most allocate 2 temporary arrays of 1 element each
$key = array_keys(array_slice($array, $n, 1, true))[0];

$array[$key] = $value;

4
এখানে দুর্দান্ত সমাধান!
দান

1

এটা চেষ্টা কর. এটা আপনার জন্য কাজ করে।

$result= array_values($my_arr); // Array with indexes you need

4
পুরানো থ্রেডে পোস্ট করার সময় দয়া করে সাবধান হন যার ইতিমধ্যে বেশ কয়েকটি প্রতিক্রিয়া এবং একটি স্বীকৃত উত্তর রয়েছে। আপনার উত্তরটি বিদ্যমান উত্তরগুলির চেয়ে কেন ভাল তা আপনাকে ব্যাখ্যা করতে হবে।
এপিসি

0

আরেকটি সম্ভাবনা হ'ল এটিকে একটি সাধারণ অ্যারেতে রূপান্তর করা:

$ অ্যারেবফ = ইমপ্লোড ("~~~", $ মাই_আর);
$ my_arr = বিস্ফোরিত ("~~~", $ অ্যারেবফ);

"~~~" হ'ল এমন একটি সীমানা যা আপনার ডেটাতে ঘটে না।

এখন আপনি অফসেটের সমান সংখ্যাসূচক সূচকগুলি ব্যবহার করে অ্যারে অ্যাক্সেস করতে পারবেন।

আপনার যদি এখনও আপনার সহযোগী অ্যারে ধরে রাখতে হয় তবে এটি অন্য ভেরিয়েবলের জন্য নিযুক্ত করুন।


যেহেতু আপনার সর্বদা এবং সর্বদা বিবেচনা করা উচিত, এই সঠিক ডিলিমিটারটি আপনার ডেটাতে ঘটতে পারে, এই ধারণাটি 99.9999999% তে কাজ করে। 100% কাজ করবে এমন বেশ কয়েকটি সমাধান রয়েছে esদিকে, এটি প্রসেসরটিকে প্রচুর পরিমাণে কাজের জন্য সেট করে এবং কেবল একটি সাধারণ অ্যারে অ্যাক্সেসের জন্য মেমরি নষ্ট করে।
ব্যবহারকারী 426486
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.