어레이 / 객체에 어떻게 액세스 할 수 있습니까?
나는 다음 배열을 가지고 있고 내가 할 때 print_r(array_values($get_user));
나는 얻는다.
Array (
[0] => 10499478683521864
[1] => 07/22/1983
[2] => email@saya.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
노트 :
이 배열은 Facebook SDK 4 에서 가져 오므로 원래 배열 구조를 모릅니다.
예를 들어 email@saya.com
배열 의 값에 액세스하려면 어떻게 해야합니까?
에 액세스하려면 array
또는 object
두 개의 다른 연산자를 사용하는 방법.
배열
배열 요소에 액세스하려면 둘 중 하나를 사용해야하거나 []
많이 표시되지 않지만 사용할 수도 있습니다 {}
.
echo $array[0];
echo $array{0};
//Both are equivalent and interchangeable
배열 선언과 배열 요소 액세스의 차이점
배열을 정의하고 배열 요소에 액세스하는 것은 서로 다른 두 가지입니다. 따라서 그들을 섞지 마십시오.
배열을 정의하려면 사용 array()
하거나 PHP> = 5.4의 []
경우 배열 / 요소를 할당 / 설정합니다. 위에서 언급했듯이 []
또는 배열 요소에 액세스 할 때 {}
요소 설정과 반대되는 배열 요소의 값을 얻습니다.
// 배열 선언 $ arrayA = array ( / * 여기에 일부 항목 * / ) ; $ arrayB = [ / * 여기에 몇 가지 항목 * / ] ; // PHP> = 5.4 전용 // 배열 요소에 액세스 echo $ array [ 0 ] ; echo $ array { 0 } ;
배열 요소에 액세스
배열의 특정 요소에 액세스하려면 내부 []
또는 {}
액세스하려는 키로 평가되는 표현식을 사용할 수 있습니다.
$ array [ (모든 표현식) ]
따라서 키로 사용하는 표현식과 PHP에서 어떻게 해석되는지 알고 있어야합니다.
echo $ array [ 0 ]; // 키는 정수입니다 . 0의 요소에 액세스합니다. echo $ array [ "0" ]; // 키는 문자열입니다 . 0의 요소에 액세스합니다. echo $ array [ "문자열" ]; // 키는 문자열입니다 . '문자열'키로 요소에 액세스합니다. echo $ array [ 상수 ]; // 키는 상수 이며 해당 값으로 대체됩니다. echo $ array [ cOnStAnT ]; // 키는 문자열이 아닌 상수 이기도 합니다. echo $ array [ $ anyVariable ] // 키는 변수 이고 '$ anyVariable'에있는 값으로 대체됩니다. echo $ array [ functionXY () ]; // 키는 함수 의 반환 값 이됩니다.
다차원 배열에 액세스
서로에 여러 배열이있는 경우 단순히 다차원 배열이 있습니다. 하위 배열의 배열 요소에 액세스하려면 여러 []
.
echo $array["firstSubArray"]["SecondSubArray"]["ElementFromTheSecondSubArray"]
// ├─────────────┘ ├──────────────┘ ├────────────────────────────┘
// │ │ └── 3rd Array dimension;
// │ └──────────────────── 2d Array dimension;
// └───────────────────────────────────── 1st Array dimension;
사물
개체 속성에 액세스하려면을 사용해야 ->
합니다.
echo $ object- > 속성;
다른 개체에 개체가있는 경우 ->
개체 속성을 가져 오기 위해 여러 개 를 사용해야 합니다.
echo $objectA->objectB->property;
노트 :
또한 유효하지 않은 속성 이름이있는 경우에도주의해야합니다! 따라서 잘못된 속성 이름으로 직면 할 수있는 모든 문제를 보려면 this question / answer를 참조하십시오 . 그리고 특히 이 하나 당신은 속성 이름의 시작 부분에 번호가있는 경우.
클래스 외부에서 공개적으로 표시 되는 속성에만 액세스 할 수 있습니다 . 그렇지 않으면 (개인 또는 보호) 속성의 가치를 얻는 데 사용할 수있는 메서드 또는 반영이 필요합니다.
배열 및 개체
이제 배열과 객체가 서로 섞여있는 경우 이제 배열 요소 또는 객체 속성에 액세스하고 이에 해당하는 연산자를 사용하는지 살펴보면됩니다.
//목적 echo $ object-> anotherObject-> propertyArray [ "elementOneWithAnObject"]-> property; // ├────┘ ├───────────┘ ├───────────┘ ├─────────────── ───────┘ ├──────┘ // │ │ │ │ └── 재산; // │ │ │ └───────────────────────────── 배열 요소 (객체); 사용 -> 속성 'property'에 액세스하려면 // │ │ └─────────────────────────────────────────── array ( 특성) ; 사용 [] 배열 요소를 액세스하려면 'elementOneWithAnObject' // │ └────────────────────────────────────────────── ──────────── 재산 (객체); 사용 -> 속성 'propertyArray'에 액세스하려면 // └─────────────────────────────────────────────── ─────────────────── 대상; 사용 -> 속성 'anotherObject'에 액세스하려면 //정렬 echo $ array [ "arrayElement"] [ "anotherElement"]-> object-> property [ "element"]; // ├───┘ ├────────────┘ ├─────────────┘ ├────┘ ├────── ┘ ├───────┘ // │ │ │ │ │ └── 배열 요소; // │ │ │ │ └─────────── 속성 (배열); 사용 [] 배열 요소를 액세스하려면 '요소' // │ │ │ └─────────────────── 속성 (객체); 사용 -> 속성 'property'에 액세스하려면 // │ │ └───────────────────────────────────── 배열 요소 (객체); 사용 -> 속성 'object'에 액세스하려면 // │ └────────────────────────────────────────────── ──────── 배열 요소 (배열); 사용 [] 배열 요소를 액세스하려면 'anotherElement' // └─────────────────────────────────────────────── ───────────── 배열; 사용 [] 배열 요소를 액세스하려면 'arrayElement'
이것이 서로 중첩되었을 때 배열과 객체에 액세스하는 방법을 대략적으로 이해하기를 바랍니다.
노트 :
배열 또는 객체라고 불리는 경우 변수의 가장 바깥 쪽 부분에 따라 다릅니다. 그래서
[new StdClass]
인 배열 이 (중첩 된) 경우에도 내부에 그 목적 및$object->property = array();
인 개체 내부가 (중첩 된) 경우에도 어레이.객체 또는 배열이 있는지 확실하지 않은 경우
gettype()
.
누군가가 당신과 다른 코딩 스타일을 사용한다고해서 혼동하지 마십시오.
//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 ( $key
) data
와 value ( $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)
당신은 키 (로 3 요소를했을 두 번째 차원에서 여기 수단 $key
) 0
, 1
, 2
그 값 ( $value
) :
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) }
배열 // print_r () ( [0] => 1 [1] => 2 [2] => 3 )
배열 ( // var_export () 0 => 1, 1 => 2, 2 => 3, ),
이는 값에 키 / 인덱스 1이 있으므로 []
/ {}
를 사용하여 값 2에 액세스 해야 함을 의미 [1]
합니다.
2. 다음으로 배열이 객체의 이름 속성을 가진 속성에 할당되었음을 알 수 있습니다.
object (stdClass) # 1 (1) { // var_dump () [ "property"] => / * 여기에 배열 * / }
stdClass 객체 // print_r () ( [property] => / * 여기에 배열 * / )
stdClass :: __ set_state ( array (// var_export () 'property' => / * 여기에 배열 * / ) ),
즉 ->
, 객체의 속성에 액세스하려면 을 사용해야 합니다 ->property
.
그래서 지금까지 우리는 ->property[1]
.
3. And at the end we see, that the outermost is an array
array(1) { //var_dump() ["key"]=> /* Object & Array here */ }
Array //print_r() ( [key] => /* Object & Array here */ )
array ( //var_export() 'key' => /* Object & Array here */ )
As we know that we have to access an array element with []
, we see here that we have to use ["key"]
to access the object. We now can put all these parts together and write:
echo $array["key"]->property[1];
And the output will be:
2
Don't let PHP troll you!
There are a few things, which you have to know, so that you don't spend hours on it finding them.
"Hidden" characters
Sometimes you have characters in your keys, which you don't see on the first look in the browser. And then you're asking yourself, why you can't access the element. These characters can be: tabs (
\t
), new lines (\n
), spaces or html tags (e.g.</p>
,<b>
), etc.As an example if you look at the output of
print_r()
and you see:Array ( [key] => HERE )
Then you are trying to access the element with:
echo $arr["key"];
But you are getting the notice:
Notice: Undefined index: key
This is a good indication that there must be some hidden characters, since you can't access the element, even if the keys seems pretty correct.
The trick here is to use
var_dump()
+ look into your source code! (Alternative:highlight_string(print_r($variable, TRUE));
)And all of the sudden you will maybe see stuff like this:
array(1) { ["</b> key"]=> string(4) "HERE" }
Now you will see, that your key has a html tag in it + a new line character, which you didn't saw in the first place, since
print_r()
and the browser didn't showed that.So now if you try to do:
echo $arr["</b>\nkey"];
You will get your desired output:
HERE
Never trust the output of
print_r()
orvar_dump()
if you look at XMLYou might have an XML file or string loaded into an object, e.g.
<?xml version="1.0" encoding="UTF-8" ?> <rss> <item> <title attribute="xy" ab="xy">test</title> </item> </rss>
Now if you use
var_dump()
orprint_r()
you will see:SimpleXMLElement Object ( [item] => SimpleXMLElement Object ( [title] => test ) )
So as you can see you don't see the attributes of title. So as I said never trust the output of
var_dump()
orprint_r()
when you have an XML object. Always useasXML()
to see the full XML file/string.So just use one of the methods shown below:
echo $xml->asXML(); //And look into the source code highlight_string($xml->asXML()); header ("Content-Type:text/xml"); echo $xml->asXML();
And then you will get the output:
<?xml version="1.0" encoding="UTF-8"?> <rss> <item> <title attribute="xy" ab="xy">test</title> </item> </rss>
For more information see:
General (symbols, errors)
- Reference - What does this symbol mean in PHP?
- Reference - What does this error mean in PHP?
- PHP Parse/Syntax Errors; and How to solve them?
Property name problems
- How can I access a property with an invalid name?
- How to access object properties with names like integers?
From the question we can't see the structure of input array. It maybe array ('id' => 10499478683521864, 'date' => '07/22/1983')
. So when you ask $demo[0] you use undefind index.
Array_values lost keys and return array with numerous keys making array as array(10499478683521864, '07/22/1983'...)
. This result we see in the question.
So, you can take an array item values by the same way
echo array_values($get_user)[0]; // 10499478683521864
If your output from print_r($var)
is e.g:
Array ( [demo] => Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => email@saya.com ) )
then do $var['demo'][0]
If the output from print_r($var)
is e.g:
Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => email@saya.com )
then do $var[0]
you can use
$ar = (array) $get_user;
then you can access their indices arra-wise:
echo $ar[0];
참고URL : https://stackoverflow.com/questions/30680938/how-can-i-access-an-array-object
'IT박스' 카테고리의 다른 글
기본에 비해 너무 큰 값 (오류 토큰은 "08"임) (0) | 2020.12.12 |
---|---|
Windows 10 미리보기의 Microsoft Edge (Project Spartan)에서 localhost를 열 수 없음 (0) | 2020.12.12 |
정수를 쓰여진 숫자로 변환 (0) | 2020.12.12 |
Ruby에서 튜플을 사용하십니까? (0) | 2020.12.12 |
SIGTERM 처리 방법 (0) | 2020.12.12 |