So, here is the TLDR; $string = 'this is a string'; In PHP 5.5 isset($string['check']) === false isset($string['check'][0]) === true Why can't let isset($string['check']) === false isset($string['check'][0]) === false <-- ? On Thu, May 15, 2014 at 12:27 AM, Jim Lucas <lists@xxxxxxxxx> wrote: > 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