On 05/13/2014 08:22 AM, \R\N wrote:
Greeting guys, I got a problem on checking and getting a string with multi dim index (like ['blablabla']['blabla']). It confusing me, so I think I need to found an answer to clear myself. First of all, I known that is wrong to get something from a string using a multi dim index or even a string index. I did it by mistakenly set a wrong parameter. The parameter supposed to be array with string as index (That will actually be a hashmap), but I setted a string on it. As result, I got a warning raised: Illegal string offset. It's normal since I use the string as index to attempt to getting something from a string. But the strange thing is, I did the isset check before use the index. It supposed to be hot pass the check, but it did. So I made a shorter test here: https://gist.github.com/raincious/682ba152dbd74537e323#file-stringisset-php The test 1 is what I used in my application, it checks if the array index is set and not empty in same time. A valid param for it should be like this: $string = array( 'check' => 'yes', ); // Please ignore the variable name But when the $string truly turned to a string, it become the source of my question. Please notice that, on document: http://www.php.net/manual/en/function.isset.php says, "Checking non-numeric offsets of strings now returns FALSE." since 5.4, and I using 5.5. So the test 3 (isset($string['check']) one) running as expected, it returns false. However, the test1 (isset($string['check'][0]) one) is unfortunatly not, It actually returnning true. I'm not a experter of PHP and I even need other people's help to read PHP source code, but in the information from the document and the talking with other people gives me some guts to guess the $string['check'][0] actually will be converted into $string[(int)'check'][0] and then into $string[0][0], so the test 1 can be pass. Is that right? So, what I want to know is, why there has two kind of behaviour for isset? Maybe it's better to let the isset($string['check'][0]) and isset($string['check']) both return false?
What you are describing, and what is in your test script on github is extremely confusing. I'm still not sure what you think you are trying to accomplish with your tests.
Can you give us a real world example of what it is you are trying to do?
And sorry for my english, please ask if you confused by me. Thank you, R
-- Jim Lucas http://www.cmsws.com/ http://www.cmsws.com/examples/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php