php - আমি কীভাবে কোনও অ্যারে/অবজেক্ট অ্যাক্সেস করতে পারি?




arrays class (3)

আমার নিম্নলিখিত অ্যারে রয়েছে এবং যখন আমি print_r(array_values($get_user)); , আমি পাই:

Array (
          [0] => 10499478683521864
          [1] => 07/22/1983
          [2] => [email protected].com
          [3] => Alan [4] => male
          [5] => Malmsteen
          [6] => https://www.facebook.com  app_scoped_user_id/1049213468352864/
          [7] => stdClass Object (
                   [id] => 102173722491792
                   [name] => Jakarta, Indonesia
          )
          [8] => id_ID
          [9] => El-nino
          [10] => Alan El-nino Malmsteen
          [11] => 7
          [12] => 2015-05-28T04:09:50+0000
          [13] => 1
        ) 

আমি নিম্নলিখিত হিসাবে অ্যারে অ্যাক্সেস করার চেষ্টা করেছি:

echo $get_user[0];

তবে এটি আমাকে প্রদর্শন করে:

অপরিবর্তিত 0

বিঃদ্রঃ:

আমি এই অ্যারেটি ফেসবুক এসডিকে 4 থেকে পেয়েছি, তাই আমি মূল অ্যারের কাঠামোটি জানি না।

অ্যারে থেকে আমি কীভাবে [email protected] মূল্য হিসাবে উদাহরণ হিসাবে অ্যাক্সেস করতে পারি?


একটি array অ্যাক্সেস করতে বা আপনাকে কীভাবে দুটি পৃথক অপারেটর ব্যবহার করবেন তা object করতে।

Arrays

অ্যারে উপাদানগুলিতে অ্যাক্সেস করতে আপনাকে হয় [] ব্যবহার করতে হবে যা আপনি খুব বেশি দেখতে পাচ্ছেন না, তবে আপনি যা ব্যবহার করতে পারেন তা হ'ল {}

echo $array[0];
echo $array{0};
//Both are equivalent and interchangeable

একটি অ্যারে ঘোষণা এবং একটি অ্যারের উপাদান অ্যাক্সেস মধ্যে পার্থক্য

একটি অ্যারের সংজ্ঞা দেওয়া এবং একটি অ্যারের উপাদান অ্যাক্সেস করা দুটি ভিন্ন জিনিস। সুতরাং তাদের মিশ্রিত করবেন না।

একটি অ্যারে সংজ্ঞায়িত করতে আপনি array() বা পিএইচপি> = 5.4 [] ব্যবহার করতে পারেন এবং আপনি একটি অ্যারে /-উপাদান নির্ধারণ / সেট করেন। উপরে বর্ণিত হিসাবে আপনি যখন [] বা {} with দিয়ে একটি অ্যারের উপাদান অ্যাক্সেস করছেন তখন আপনি কোনও উপাদান নির্ধারণের বিরোধী একটি অ্যারের উপাদানটির মান পাবেন।

//Declaring an array
$arrayA = array ( /*Some stuff in here*/ );
$arrayB = [ /*Some stuff in here*/ ]; //Only for PHP >=5.4

//Accessing an array element
echo $array[0];
echo $array{0};

অ্যারে উপাদান অ্যাক্সেস করুন

অ্যারেতে কোনও নির্দিষ্ট উপাদান অ্যাক্সেস করতে আপনি [] বা {} inside এর ভিতরে যে কোনও এক্সপ্রেশন ব্যবহার করতে পারেন যা আপনি যে কীটি অ্যাক্সেস করতে চান তার মূল্যায়ন করে:

$array[(Any expression)]

সুতরাং আপনি কী হিসাবে কী ভাবটি কী হিসাবে ব্যবহার করেন এবং কীভাবে এটি পিএইচপি দ্বারা ব্যাখ্যা করা হয় তা সম্পর্কে সচেতন হন:

echo $array[0];            //The key is an integer; It accesses the 0's element
echo $array["0"];          //The key is a string; It accesses the 0's element
echo $array["string"];     //The key is a string; It accesses the element with the key 'string'
echo $array[CONSTANT];     //The key is a constant and it gets replaced with the corresponding value
echo $array[cOnStAnT];     //The key is also a constant and not a string
echo $array[$anyVariable]  //The key is a variable and it gets replaced with the value which is in '$anyVariable'
echo $array[functionXY()]; //The key will be the return value of the function

বহুমাত্রিক অ্যারে অ্যাক্সেস করুন

যদি আপনার একে অপরের মধ্যে একাধিক অ্যারে থাকে তবে আপনার কেবল একটি বহুমাত্রিক অ্যারে রয়েছে। সাব অ্যারেতে একটি অ্যারের উপাদান অ্যাক্সেস করতে আপনাকে কেবল একাধিক [] ব্যবহার করতে হবে।

echo $array["firstSubArray"]["SecondSubArray"]["ElementFromTheSecondSubArray"]
         // ├─────────────┘  ├──────────────┘  ├────────────────────────────┘
         // │                │                 └── 3rd Array dimension;
         // │                └──────────────────── 2d  Array dimension;
         // └───────────────────────────────────── 1st Array dimension;

Objects

কোনও সামগ্রীর সম্পত্তি অ্যাক্সেস করতে আপনাকে -> ব্যবহার করতে হবে।

echo $object->property;

অন্য কোনও অবজেক্টে যদি আপনার কোনও অবজেক্ট থাকে তবে আপনার অবজেক্ট প্রোপার্টিটি পেতে আপনাকে কেবল একাধিক -> ব্যবহার করতে হবে।

echo $objectA->objectB->property;

বিঃদ্রঃ:

  1. এছাড়াও আপনার যদি কোনও সম্পত্তির নাম অবৈধ হয় তবে আপনাকে অবশ্যই যত্নবান হতে হবে! সুতরাং সমস্ত সমস্যা দেখতে, যা আপনি একটি অবৈধ সম্পত্তির নাম সহ মুখোমুখি হতে পারেন এই question/answer । এবং বিশেষত এটির একটি যদি আপনার সম্পত্তির নামের শুরুতে নম্বর থাকে।

  2. আপনি কেবল শ্রেণীর বাইরে থেকে জনসাধারণের visibility বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতে পারেন। অন্যথায় (ব্যক্তিগত বা সুরক্ষিত) আপনার একটি পদ্ধতি বা প্রতিবিম্ব প্রয়োজন, যা আপনি সম্পত্তির মান পেতে ব্যবহার করতে পারেন।

অ্যারে এবং অবজেক্টস

এখন যদি আপনার একে অপরের সাথে অ্যারে এবং অবজেক্টগুলি মিশ্রিত থাকে তবে আপনাকে এখনই দেখতে হবে যে আপনি এখন কোনও অ্যারে উপাদান বা কোনও বস্তুর সম্পত্তি অ্যাক্সেস করতে পারেন এবং এর জন্য সংশ্লিষ্ট অপারেটরটি ব্যবহার করেন।

//Object
echo $object->anotherObject->propertyArray["elementOneWithAnObject"]->property;
    //├────┘  ├───────────┘  ├───────────┘ ├──────────────────────┘   ├──────┘
    //│       │              │             │                          └── property ; 
    //│       │              │             └───────────────────────────── array element (object) ; Use -> To access the property 'property'
    //│       │              └─────────────────────────────────────────── array (property) ; Use [] To access the array element 'elementOneWithAnObject'
    //│       └────────────────────────────────────────────────────────── property (object) ; Use -> To access the property 'propertyArray'
    //└────────────────────────────────────────────────────────────────── object ; Use -> To access the property 'anotherObject'


//Array
echo $array["arrayElement"]["anotherElement"]->object->property["element"];
    //├───┘ ├────────────┘  ├──────────────┘   ├────┘  ├──────┘ ├───────┘
    //│     │               │                  │       │        └── array element ; 
    //│     │               │                  │       └─────────── property (array) ; Use [] To access the array element 'element'
    //│     │               │                  └─────────────────── property (object) ; Use -> To access the property 'property'
    //│     │               └────────────────────────────────────── array element (object) ; Use -> To access the property 'object'
    //│     └────────────────────────────────────────────────────── array element (array) ; Use [] To access the array element 'anotherElement'
    //└──────────────────────────────────────────────────────────── array ; Use [] To access the array element 'arrayElement'

আমি আশা করি এটি আপনাকে একেবারে ধারণা দেয় যে আপনি কীভাবে অ্যারে এবং অবজেক্টগুলিতে অ্যাক্সেস করতে পারবেন, যখন তারা একে অপরকে বাসা বেঁধে রাখে।

বিঃদ্রঃ:

  1. যদি এটিকে অ্যারে বলা হয় বা অবজেক্ট আপনার ভেরিয়েবলের বাইরের অংশের উপর নির্ভর করে। সুতরাং [new StdClass] হ'ল একটি অ্যারে এমনকি যদি এর ভিতরে (নেস্টেড) অবজেক্ট থাকে এবং $object->property = array(); এটি একটি বস্তু এমনকি যদি এটি ভিতরে ভিতরে (অ্যারেস্টেড) অ্যারে থাকে।

    এবং যদি আপনার কাছে কোনও অবজেক্ট বা অ্যারে রয়েছে কিনা তা নিশ্চিত না হন তবে কেবল gettype() ব্যবহার করুন।

  1. কেউ যদি আপনার চেয়ে অন্য কোডিং স্টাইল ব্যবহার করে তবে নিজেকে বিভ্রান্ত করবেন না:

    //Both methods/styles work and access the same data
    echo $object->anotherObject->propertyArray["elementOneWithAnObject"]->property;
    echo $object->
            anotherObject
            ->propertyArray
            ["elementOneWithAnObject"]->
            property;
    
    //Both methods/styles work and access the same data
    echo $array["arrayElement"]["anotherElement"]->object->property["element"];
    echo $array["arrayElement"]
         ["anotherElement"]->
             object
       ->property["element"];

অ্যারে, অবজেক্টস এবং লুপগুলি

যদি আপনি কেবল একটি একক উপাদান অ্যাক্সেস করতে না চান তবে আপনি আপনার নেস্টেড অ্যারে / অবজেক্টটি লুপ করতে পারেন এবং একটি নির্দিষ্ট মাত্রার মানগুলিতে যেতে পারেন।

এর জন্য আপনাকে কেবলমাত্র মাত্রাটি অ্যাক্সেস করতে হবে যার উপর দিয়ে আপনি লুপ করতে চান এবং তারপরে আপনি সেই মাত্রার সমস্ত মান লুপ করতে পারেন।

উদাহরণ হিসাবে আমরা একটি অ্যারে নিই, তবে এটি কোনও বস্তুও হতে পারে:

Array (
    [data] => Array (
            [0] => stdClass Object (
                    [propertyXY] => 1
                )    
            [1] => stdClass Object (
                    [propertyXY] => 2
                )   
            [2] => stdClass Object (
                    [propertyXY] => 3                   
               )    
        )
)

আপনি যদি প্রথম মাত্রাটি লুপ করেন তবে আপনি প্রথম মাত্রা থেকে সমস্ত মান পাবেন:

foreach($array as $key => $value)

এখানে প্রথম মাত্রায় অর্থ কী ( $key ) data এবং মান ( $value ) সহ আপনার কেবলমাত্র 1 টি উপাদান থাকবে:

Array (  //Key: array
    [0] => stdClass Object (
            [propertyXY] => 1
        )
    [1] => stdClass Object (
            [propertyXY] => 2
        )
    [2] => stdClass Object (
            [propertyXY] => 3
        )
)

আপনি যদি দ্বিতীয় মাত্রাটি লুপ করেন তবে আপনি দ্বিতীয় মাত্রা থেকে সমস্ত মান পাবেন:

foreach($array["data"] as $key => $value)

এর অর্থ এখানে দ্বিতীয় মাত্রায় কী ( $key ) 0 , 1 , 2 এবং মানগুলি ( $value ) সহ আপনার 3 টি উপাদান থাকবে:

stdClass Object (  //Key: 0
    [propertyXY] => 1
)
stdClass Object (  //Key: 1
    [propertyXY] => 2
)
stdClass Object (  //Key: 2
    [propertyXY] => 3
)

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

var_dump() / print_r() / var_export() আউটপুট বিশ্লেষণ করুন

এই 3 টি ডিবাগ ফাংশনগুলির সমস্ত একই ডেটা আউটপুট দেয়, কেবল অন্য ফর্ম্যাটে বা কিছু মেটা ডেটা (যেমন টাইপ, আকার) দিয়ে। সুতরাং এখানে আমি আপনাকে কীভাবে আপনার অ্যারে / অবজেক্ট থেকে নির্দিষ্ট ডেটা অ্যাক্সেস করবেন তা জানতে / জানতে কীভাবে আপনাকে এই ফাংশনগুলির আউটপুট পড়তে হবে তা দেখাতে চাই।

ইনপুট অ্যারে:

$array = [
    "key" => (object) [
        "property" => [1,2,3]
    ]
];

var_dump() আউটপুট:

array(1) {
  ["key"]=>
  object(stdClass)#1 (1) {
    ["property"]=>
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
    }
  }
}

print_r() আউটপুট:

Array
(
    [key] => stdClass Object
        (
            [property] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

        )

)

var_export() আউটপুট:

array (
  'key' => 
  stdClass::__set_state(array(
     'property' => 
    array (
      0 => 1,
      1 => 2,
      2 => 3,
    ),
  )),
)

আপনি দেখতে পারেন যে সমস্ত আউটপুট বেশ অনুরূপ। এবং যদি আপনি এখন 2 মানটি অ্যাক্সেস করতে চান তবে আপনি কেবল মানটি থেকেই শুরু করতে পারেন যা আপনি অ্যাক্সেস করতে চান এবং "উপরে বাম দিকে" বেরিয়ে যেতে চান।

1. আমরা প্রথম দেখতে পাই যে মান 2 কী 1 সহ একটি অ্যারেতে রয়েছে

array(3) {  //var_dump()
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

Array  //print_r()
(
  [0] => 1
  [1] => 2
  [2] => 3
)

array (  //var_export()
  0 => 1,
  1 => 2,
  2 => 3,
),

এর অর্থ আমাদের [] / {} use 2 [1] দিয়ে মানটি অ্যাক্সেস করতে ব্যবহার করতে হবে, যেহেতু মানটির কী / সূচক 1 রয়েছে।

২. এরপরে আমরা দেখতে পাচ্ছি যে অ্যারের কোনও বস্তুর নাম সম্পত্তি সহ একটি সম্পত্তি দেওয়া হয়েছে

object(stdClass)#1 (1) {  //var_dump()
  ["property"]=>
    /* Array here */
}

stdClass Object  //print_r()
(
  [property] => /* Array here */
)

stdClass::__set_state(array(  //var_export()
  'property' => 
    /* Array here */
)),

এর অর্থ আমাদের অবজেক্টের বৈশিষ্ট্য যেমন ->property অ্যাক্সেস করতে -> ব্যবহার করতে হবে।

সুতরাং এখন অবধি আমরা জানি যে আমাদের ->property[1] ব্যবহার করতে হবে।

৩. এবং শেষে আমরা দেখতে পাচ্ছি যে বাহ্যিকতমটি একটি অ্যারে

array(1) {  //var_dump()
  ["key"]=>
    /* Object & Array here */
}

Array  //print_r()
(
  [key] => 
    /* Object & Array here */
)

array (  //var_export()
  'key' =>
    /* Object & Array here */
)

যেহেতু আমরা জানি যে আমাদের [] সহ একটি অ্যারে উপাদান অ্যাক্সেস করতে হবে, আমরা এখানে দেখতে পাচ্ছি যে অবজেক্টটি অ্যাক্সেস করতে আমাদের ["key"] ব্যবহার করতে হবে। আমরা এখন এই সমস্ত অংশ একসাথে রেখে লিখতে পারি:

echo $array["key"]->property[1];

এবং আউটপুট হবে:

2

পিএইচপি আপনাকে ট্রল করতে দেবেন না!

কয়েকটি জিনিস রয়েছে, যা আপনাকে জানতে হবে, যাতে এটি খুঁজে পেতে আপনি কয়েক ঘন্টা ব্যয় না করে।

  1. "লুকানো" অক্ষর

    কখনও কখনও আপনার কীগুলিতে অক্ষর থাকে যা আপনি ব্রাউজারে প্রথম দেখায় না। এবং তারপরে আপনি নিজেকে জিজ্ঞাসা করছেন, আপনি কেন উপাদানটি অ্যাক্সেস করতে পারবেন না। এই অক্ষরগুলি হ'ল: ট্যাব ( \t ), নতুন লাইন ( \n ), স্পেস বা এইচটিএমএল ট্যাগগুলি (যেমন </p> , <b> ), ইত্যাদি etc.

    উদাহরণ হিসাবে যদি আপনি print_r() এর আউটপুট দেখুন এবং আপনি দেখুন:

    Array ( [key] => HERE ) 

    তারপরে আপনি এর সাথে উপাদানটি অ্যাক্সেস করার চেষ্টা করছেন:

    echo $arr["key"];

    তবে আপনি বিজ্ঞপ্তিটি পেয়ে যাচ্ছেন:

    বিজ্ঞপ্তি: অপরিজ্ঞাত সূচক: কী

    এটি একটি ভাল ইঙ্গিত যে এখানে কিছু লুকানো অক্ষর থাকতে হবে, যেহেতু আপনি কীটি বেশ সঠিক বলে মনে হলেও আপনি উপাদানটি অ্যাক্সেস করতে পারবেন না।

    এখানে কৌশলটি হ'ল var_dump() + আপনার উত্স কোডটি সন্ধান করুন! (বিকল্প: highlight_string(print_r($variable, TRUE)); )

    এবং হঠাৎ আপনি সম্ভবত এই জাতীয় জিনিস দেখতে পাবেন:

    array(1) {
      ["</b>
    key"]=>
      string(4) "HERE"
    }

    এখন আপনি দেখতে পাবেন, আপনার কীতে এটিতে একটি HTML ট্যাগ রয়েছে + একটি নতুন লাইন চরিত্র, যা আপনি প্রথম স্থানে দেখেন নি, যেহেতু print_r() এবং ব্রাউজারটি এটি দেখায় নি that

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

    echo $arr["</b>\nkey"];

    আপনি আপনার পছন্দসই আউটপুট পাবেন:

    HERE
  2. আপনি যদি এক্সএমএল তাকান তবে print_r() বা var_dump() এর print_r() কখনই বিশ্বাস করবেন না

    আপনার কোনও এক্সএমএল ফাইল বা স্ট্রিং কোনও বস্তুর মধ্যে বোঝা থাকতে পারে, যেমন

    <?xml version="1.0" encoding="UTF-8" ?> 
    <rss> 
        <item> 
            <title attribute="xy" ab="xy">test</title> 
        </item> 
    </rss>

    এখন আপনি যদি var_dump() বা print_r() ব্যবহার করেন তবে আপনি দেখতে পাবেন:

    SimpleXMLElement Object
    (
        [item] => SimpleXMLElement Object
        (
            [title] => test
        )
    
    )

    আপনি যেমন দেখতে পাচ্ছেন শিরোনামের বৈশিষ্ট্যগুলি দেখতে পাচ্ছেন না। সুতরাং আমি যেমন বলেছি যে আপনার যখন কোনও এক্সএমএল অবজেক্ট থাকে তখন কখনই var_dump() বা print_r() এর আউটপুটকে বিশ্বাস করবেন না। সম্পূর্ণ এক্সএমএল ফাইল / স্ট্রিং দেখতে সর্বদা asXML() ব্যবহার করুন।

    সুতরাং নীচে প্রদর্শিত পদ্ধতিগুলির মধ্যে কেবল একটি ব্যবহার করুন:

    echo $xml->asXML();  //And look into the source code
    
    highlight_string($xml->asXML());
    
    header ("Content-Type:text/xml");
    echo $xml->asXML();

    এবং তারপরে আপনি আউটপুট পাবেন:

    <?xml version="1.0" encoding="UTF-8"?>
    <rss> 
        <item> 
            <title attribute="xy" ab="xy">test</title> 
        </item> 
    </rss>

আরও তথ্যের জন্য দেখুন:

সাধারণ (চিহ্ন, ত্রুটি)

  • রেফারেন্স - এই চিহ্নটি পিএইচপি এর অর্থ কী?
  • রেফারেন্স - পিএইচপি-তে এই ত্রুটিটির অর্থ কী?
  • পিএইচপি পার্স / সিনট্যাক্স ত্রুটি; এবং কিভাবে তাদের সমাধান করবেন?

সম্পত্তি নাম সমস্যা

  • question/answer
  • পূর্ণসংখ্যার মতো নাম সহ কীভাবে অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করবেন?

তুমি ব্যবহার করতে পার

$ar = (array) $get_user;

তারপরে আপনি তাদের সূচকগুলি অর-ভিত্তিতে অ্যাক্সেস করতে পারবেন:

echo $ar[0];

print_r($var) থেকে আপনার আউটপুট যদি উদাহরণস্বরূপ হয়:

    Array ( [demo] => Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => [email protected].com ) )

তারপরে $var['demo'][0]

print_r($var) থেকে আউটপুট যদি উদাহরণস্বরূপ হয়:

    Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => [email protected].com )

তারপরে $var[0]





properties