পিএইচপি-তে ডায়নামিক ভেরিয়েবল নামের ব্র্যাকস ব্যবহার করা


191

আমি গতিশীল পরিবর্তনশীল নামগুলি ব্যবহার করার চেষ্টা করছি (তারা আসলে কী বলে আমি নিশ্চিত নই) তবে এটি বেশ ভালো:

for($i=0; $i<=2; $i++) {
    $("file" . $i) = file($filelist[$i]);
}

var_dump($file0);

প্রত্যাবর্তনটি nullআমাকে বলে যে এটি কাজ করছে না। আমি এখানে কোন সিনট্যাক্স বা কৌশলটি সন্ধান করছি সে সম্পর্কে আমার কোনও ধারণা নেই, যা গবেষণা করা শক্ত করে তোলে। $filelistউপর আগে সংজ্ঞায়িত করা হয়।


22
না ! এগুলি ব্যবহার করার কোনও ভাল কারণ নেই। তারা, কার্যকরভাবে, কেবল একটি অপ্রীতিকর অ্যারে। পরিবর্তে একটি উপযুক্ত অ্যারে ব্যবহার করুন।
কোয়ান্টিন

ঠিক আছে আমি দুঃখিত, আমি এখনই ফিরে গিয়েছি এবং এখন পর্যন্ত জিজ্ঞাসা করা প্রতিটি প্রশ্নের উত্তর বেছে নিয়েছি। ভাল জিনিস এটি কেবল 7: পি
ব্যবহারকারী 1159454

2
এবং কোয়ান্টিন, কেন তারা খারাপ অভ্যাস ?? আমার মনে হয় অ্যারেগুলির পাশাপাশি তাদের থাকার একটি কারণ অবশ্যই থাকতে পারে
user1159454

@ user1159454 - এগুলি উপলব্ধ এমন অ্যারেগুলিতে প্রয়োগ করা যেতে পারে এমন সমস্ত সরঞ্জাম ছাড়াই একটি বিশৃঙ্খলাবদ্ধ গণ্ডগোল। এগুলি প্রাচীন উত্তরাধিকারগত কারণে এবং ক্রেজি প্রান্তের ক্ষেত্রে বিদ্যমান।
কোয়ান্টিন

8
ক্রেজি প্রান্তের কেসগুলি হ'ল কেন কেউ এই প্রশ্নটি জিজ্ঞাসা করতে চায়।
ভিনসেন্ট

উত্তর:


511

এগুলিতে মোড়ানো {}:

${"file" . $i} = file($filelist[$i]);

কাজের উদাহরণ


ব্যবহার ${}করা গতিশীল ভেরিয়েবলগুলি তৈরি করার একটি উপায়, সাধারণ উদাহরণ:

${'a' . 'b'} = 'hello there';
echo $ab; // hello there

4
একই যুক্তি দিয়ে গতিশীল অ্যারে তৈরি করা কি সম্ভব?
dtakis

@ ডটকিসের আমারও একই সন্দেহ আছে, আপনি কি আমাদের সাহায্য করতে পারেন? যদি সম্ভব হয় তবে এই প্রশ্নটি একবার দেখুন ।
মারসিও মাজ্জাচাতো

আপনি যদি কোনও ভেরিয়েবল অন্তর্ভুক্ত করতে এটি ব্যবহার করেন তবে (সবচেয়ে দরকারী উপায় আইএমএইচও) ডাবল উদ্ধৃতি ব্যবহার করতে ভুলবেন না। ইত্যাদির পরিবর্তে ${'fixedTime$i'} = $row['timeInstance'];আপনাকে খুব বেশি কার্যকর না দেয় (ভাগ্যক্রমে এটি প্রায় $fixedTime$i$fixedTime1, $fixedTime2
সরাসরিই স্পট

81

সংক্ষিপ্ত বিবরণ

পিএইচপি-তে, আপনি $একটি পরিবর্তনশীল ভেরিয়েবল তৈরি করতে কেবল একটি অতিরিক্ত একটি ভেরিয়েবলের সামনে রাখতে পারেন:

$$variableName = $value;

আমি এটি সুপারিশ করব না, আপনি এমনকি এই আচরণ শৃঙ্খল করতে পারে:

$$$$$$$$DoNotTryThisAtHomeKids = $value;

আপনি পারেন কিন্তু এর $variableNameমধ্যে রাখার জন্য বাধ্য করা হয় না {}:

${$variableName} = $value;

{}যখন আপনার ভেরিয়েবলের নামটি নিজেই একাধিক মানের সমন্বিত হয় তখন ব্যবহার করা বাধ্যতামূলক হয়:

${$variableNamePart1 . $variableNamePart2} = $value;

তবুও এটি সর্বদা ব্যবহারের জন্য সুপারিশ করা হয় {}, কারণ এটি আরও পাঠযোগ্য।

পিএইচপি 5 এবং পিএইচপি 7 এর মধ্যে পার্থক্য

সর্বদা ব্যবহার করার অন্য একটি কারণ {}হ'ল পিএইচপি 5 এবং পিএইচপি 7 এর গতিশীল ভেরিয়েবলগুলির সাথে সামান্য কিছু আলাদা পদ্ধতি রয়েছে যার ফলস্বরূপ কিছু ক্ষেত্রে পৃথক ফলাফল হয়।

পিএইচপি 7-তে, ডায়নামিক ভেরিয়েবল, বৈশিষ্ট্য এবং পদ্ধতিগুলি এখন পিএইচপি 5-তে বিশেষ ক্ষেত্রে মিশ্রণের বিপরীতে, বাম থেকে ডান ক্রমে কঠোরভাবে মূল্যায়ন করা হবে ated নীচের উদাহরণগুলি দেখায় যে মূল্যায়নের ক্রম কীভাবে পরিবর্তিত হয়েছে।

মামলা 1 : $$foo['bar']['baz']

  • পিএইচপি 5 ইন্টারপেটেশন: ${$foo['bar']['baz']}
  • পিএইচপি 7 ইন্টারপেটেশন: ${$foo}['bar']['baz']

কেস 2: $foo->$bar['baz']

  • পিএইচপি 5 ইন্টারপেটেশন: $foo->{$bar['baz']}
  • পিএইচপি 7 ইন্টারপেটেশন: $foo->{$bar}['baz']

কেস 3: $foo->$bar['baz']()

  • পিএইচপি 5 ইন্টারপেটেশন: $foo->{$bar['baz']}()
  • পিএইচপি 7 ইন্টারপেটেশন: $foo->{$bar}['baz']()

মামলা 4: Foo::$bar['baz']()

  • পিএইচপি 5 ইন্টারপেটেশন: Foo::{$bar['baz']}()
  • পিএইচপি 7 ইন্টারপেটেশন: Foo::{$bar}['baz']()

6
একটি সন্দেহজনক বিষয়ে একটি ভাল উত্তর। আমি সত্যিই খুশি যে আমাকে এই জাতীয় কোডটি ডিবাগ করতে হবে না।
মার্টিনস্টোকেলি

4
সর্বোত্তম উত্তর যেহেতু এটি কেবল
বিচারযোগ্য না হয়েই

2
হ্যাঁ, আমরা কিছু উত্তরাধিকার কোড হিসাবে কিছুটা সমস্যা পেয়েছি। উত্পাদন ছিল পিএইচপি 5.5, দেব পরিবেশ পিএইচপি 7। আমি এই প্রশ্নের পক্ষপাতিত্ব করছি।
ওজিয়ার শেহেলভিস

20

এর {}পরিবর্তে ব্যবহার করার চেষ্টা করুন ():

${"file".$i} = file($filelist[$i]);

1
phpNET ম্যানুয়াল থেকে php.net/manual/ru/language.variables.variable.php $price_for_monday = 10; $price_for_tuesday = 20; $today = 'tuesday'; $price_for_today = ${ 'price_for_' . $today}; echo $price_for_today; // will return 20
ভ্লাদিমির

5

আমি প্রায়শই কোনও কোয়েরি থেকে ফিরে আসা ফলাফলগুলিতে এটি করি ..

যেমন

// $MyQueryResult is an array of results from a query

foreach ($MyQueryResult as $key=>$value)
{
   ${$key}=$value;
}

আমি এখন $ মাইকিউয়েরিরিসাল্ট ['মাইফিল্ডনেম'] এর পরিবর্তে কেবল $ মাইফিল্ডনেম (যা প্রতিধ্বনি বিবৃতি ইত্যাদিতে আরও সহজ) ব্যবহার করতে পারি

হ্যাঁ, এটি সম্ভবত অলস, তবে আমার কোনও সমস্যা হয়নি।


14
আপনি কি কখনও পিএইচপি এর এক্সট্রাক্ট () ফাংশনটি ব্যবহার করার চেষ্টা করেছেন? php.net/manual/en/function.extract.php
ডার্কসাইড

1
ডিবি রেজাল্ট সেটের জন্য সহজ ওয়ান-লাইনার: ফরচ ($ সারি হিসাবে $ কে => $ ভি) {$$ কে = $ ভি}
অলৌকিক

2

টম যদি আপনার বিদ্যমান অ্যারে থাকে তবে আপনি সেই অ্যারেটিকে অবজেক্টে রূপান্তর করতে পারেন এবং এটি এটির মতো ব্যবহার করতে পারেন:

$r = (object) $MyQueryResult;
echo $r->key;

0

আমার গতিশীলভাবে তৈরি ভেরিয়েবল মান এবং একটি ভেরিয়েবলের সমস্ত মান একত্রিত করার সমাধান রয়েছে have

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}

0

আমি এমন একটি অবস্থানে ছিলাম যেখানে আমার কাছে 6 টি অভিন্ন অ্যারে ছিল এবং আমার অন্য ভেরিয়েবলের উপর নির্ভর করে ডানটি বেছে নিতে হবে এবং তারপরে এর মান নির্ধারণ করতে হবে। এখানে দেখানো ক্ষেত্রে - comp_cat ছিল 'a' তাই আমার আমার 'a' অ্যারে বাছাই করা দরকার (অবশ্যই আমি 'b' থেকে 'f' অ্যারেও ছিল)

নোট করুন যে অ্যারেতে ভেরিয়েবলের অবস্থানের মানগুলি বন্ধনী বন্ধনী পরে যায়।

; {'comp_cat _'। $ comp_cat .'_ আরআর '} [1] [0] = "নিখরচায় ব্লগস";

comp {'comp_cat _'।। comp_cat .'_ আরআর '} [1] [1] = $ ফাইল_টিডি;

প্রতিধ্বনি 'প্রথম অ্যারের মান' $ কমপ্লেট_ক্যাট_এ_আর [1] [0]। এবং দ্বিতীয় মান হ'ল $ comp_cat_a_arr [1] [1];


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