update
how can I retrieve this value? I need to do that if I will write the value to my database.
array(3) {
[1]=> NULL
[2]=> array(2) {
[123]=>
int(123)
[122]=>
int(0)
}
[3]=> NULL
}
There is something missing in your output. I assume it looks something like:
// var_dump($array);
array(1) {
[0]=>
string(2) "39"
}
so you can access the value with $array[0]. Simple array access.
As arrays are the most important data structure in PHP, you should learn how to deal with them.
Read PHP: Arrays.
Update:
Regarding your update, which value do you want? You have a multidimensional array. This is what you will get:
$array[1] // gives null
$array[2] // gives an array
$array[2][123] // gives the integer 123
$array[2][122] // gives the integer 0
$array[3] // gives null
Maybe you also want (have) to loop over the inner array to get all values:
foreach($array[2] as $key => $value) {
// do something with $key and $value
}
As I said, read the documentation, it contains everything you need to know. Accessing arrays in PHP is not much different than in other programming languages.
The PHP manual contains a lot of examples, it is a pretty could documentation. Use it!
If your array is referenced as $myArray, you can get the string 39 via $myArray[0], i.e., this zeroth item.
Related
I need to iterating over an array made up of strings, not objects. I've tried hunting and implementing other stackoverflow answers but dont seem to be able to make this work.
The array:
var_dump(`$myids`);
array(3) {
[0]=>
string(2) "45"
[1]=>
string(2) "46"
[2]=>
string(2) "47"
}
I tried:
$myids=$_POST['myids'];
foreach ($myids as $value){
$value['myids'];
}
Gives the error - Illegal string offset 'myids'.
Then I tried:
$myids=$_POST['myids'];
foreach ($myids as $value){
$value->myids;
}
Gives the error - Trying to access proprieties of a non object.
So I thought maybe adding the key to the foreach but that wasnt the solution. At the risk of sounding dumb, what is the solution to access each value of the array?
Well, there is no "myids" key in the array. You are using purely numeric IDs, so none of the keys will be named in your array.
$myids=$_POST['myids'];
foreach ($myids as $value){
echo $value;
}
This is unrolling each row of $myids into $value. Once it unrolls and enters the loop, you should not try to access $myids, but should work solely with $value, which represents ONLY the current row.
On the first iteration, $value will contain:
string(2) "45"
On the second iteration, $value will contain:
string(2) "46"
Third iteration:
string(2) "47"
As you can see, $value only ever contains string values, so there are no arrays or keys to access within. It's pulling one row on each iteration of the loop and inserting it directly into $value. As such, you only need to echo $value directly.
I query a database to obtain an array of results.
$usersArray = $db->getAllUsers(); // db-Query
If I print out the array's var_dump, its content is structured in form of other arrays:
array(9) { [0]=> **array**(1) { ["column"]=> string(20) "..." } [1]=> **array**(1) { ["column"] (remaining 8 are the same).
Now I need these values (which are correct, so far) to be casted as strings, so that:
array(9) { [0]=> **string**(1) { ["column"]=> string(20) "..." } [1]=> **string**(1) { ["column"] ....
There are several answers to this here and elsewhere, such as
-array_map: here I can actually cast the content as string, but- it prints "Array" instead the value. It tried then getting the content via
$users = array_map('strval',implode( $usersArray));
$users = array_map('strval', print_r($usersArray));
Neither of those worked.
Is there a method through which I could cast the content as string and get the content ? Or should I rewrite the query to format the result as strings ?
You have a wrong understanding of types or at least this:
array(9) { [0]=> **string**(1) { ["column"]=> string(20) "..." } [1]=> **string**(1) { ["column"] ....
doesn't make any sense. You believe you want elements to be of type string but yet contain array data which really doesn't work.
What you actually want is a different array structure but you are heading in the wrong direction for that.
You basically have two options:
Modify the getAllUsers() method in a way that returns your data in a structure you actually need.
Modify the data after you have received it. Obviously there's no builtin function convert_data_to_how_i_want_them() - so a basic understanding of arrays is required.
Basically you create a new array and copy those values you need to the position you need them at.
Something like this should do the trick in this case:
$out = array();
foreach($in as => $value) {
$out[] = $value['column'];
}
I have an array like this:
array(2) {
[0]=> array(1) { ["cate_id"]=> string(2) "14" }
[1]=> array(1) { ["cate_id"]=> string(2) "15" }
}
How can I check if the value 14 exists in the array without using a for loop?
I've tried this code:
var_dump(in_array('14',$categoriesId));exit;
but it returns false, and I do not know why.
I wonder why you don't need a for. Well a quickest way would be to serialize your array and do a strpos.
$yourarray = array('200','3012','14');
if(strpos(serialize($yourarray),14)!==false)
{
echo "value exists";
}
Warning : Without using looping structures you cannot guarantee the value existence inside an array. Even an in_array uses internal looping structures. So as the comments indicate you will get a false positive if there is 1414 inside the $yourarray variable. That's why I made it a point in the first place.
If you need to find a specific value in an array. You have to loop it.
Do this :
var_dump(in_array("14",array_map('current',$categoriesId))); //returns true
I'm creating an array from a database and its being created correctly as seen below.
array(2) {
["members"]=> bool(true)
["maps"]=> bool(true)
}
The issue is when I output the array using key:value the key is outputting the element number for example 0 for 'members and 1 for 'maps'.
foreach($vPrivileges as $vKey => $vValue) {
echo "$vKey: $vValue";
}
I need to output the actual name of the element and the value, I've spent awhile looking online and trying out some code samples but haven't been able to find a solution, any help is greatly appreciated.
Also I noticed that if I take the array and use the sort() function on it, it sorts as expected with one exception that it renames all the array elements to 0, 1 etc.
array(2) {
[0]=> bool(true)
[1]=> bool(true)
}
Use asort instead of sort to preserve array keys. This will fix your problem (assuming you call sort before the foreach-loop).
I'd like to transform input array from:
array(1) {
["option"]=>
array(2) {
[0]=>
string(8) "fdfsafsd"
[1]=>
string(7) "dasdasd"
...
}
}
to
array(array('option' => "fdfsafsd"), array('option' => "dasdasd"),...)
The key "option" can be whatever...
What would be the best practice?
Thanks!
Best practice would be to leave your array as it is. If you want to "transform" it, you need to assign new keys for values found in the "options" key.
$new_array = $old_array['options'];
That would get what you specified in your question, however I don't see why you'd do that in the first place.
you want to have an associative array with all the value on one key ???
That seems impossible because an associative array is one key => one Value.
so you probably want an array list, you can obtain it easely by:
$myArray = $originalArray['option']
which will be like that:
array("fdfsafsd", "dasdasd",...)