Array Key:Value Not Outputting Element Name - php

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).

Related

PHP Convert array element to string prints "Array"

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'];
}

Get attachment URL

I am attempting to grab the uploaded audio file from WordPress but having some issues. I need to grab the patch excluding the domain name so something like wp-content/uploads/2014/09/file.mp3.
I tried to use get_attached_media() and I can see exactly what I need when I var_dump() it is stored in an array with the key of guid. I have tried several different ways but I cannot access it. This is the result.
object(WP_Post)#2059 (24) {
["ID"]=>
int(4312)
["post_author"]=>
string(1) "3"
["post_date"]=>
string(19) "2014-10-06 15:33:16"
["post_parent"]=>
int(4298)
["guid"]=>
string(73) "/wp-content/uploads/2014/09/file.mp3"
}
}
I removed most of the code to keep it brief. How can I access the guid key? I store the results in $a and tried $a->guid $a['guid']and $a->post->guid and others but no luck.
Any help would be greatly appreciated.
If you look at the documentation of the get_attached_media function you will see that it returns an array of WP_Post objects.
The array is indexed by attachment id so you can't access the first element simply by doing $a[0]. I would recommend that you reindex the array before using it, like this:
$a = get_attached_media(...);
$a = array_values($a);
echo 'GUID: ' . $a[0]->guid;
You could also iterate over all the attachments like this
foreach ($a as $attachment) {
echo "GUID: {$attachment->guid}\n";
}

ksort function dont work in smarty PHP

i am trying to ksort an array, it worked when i was working with php, but i tried this in smarty template it didnt worked..
i tried like this
{{ksort($var)}}
but it returned this bool value and it even prints it..
1
actual array in $var is
array(1) { [1]=> array(2) { ["Name"]=> NULL ["SubMenu"]=> array(1) { [1]=> array(1) { ["SubName"]=> NULL } } } }
I have even tried {{$var = ksort($var)}} but it just store that bool value.
any ideas how to ksort this array in smarty??
According to the documentation ksort() always returns a boolean and the array is modified by reference.
You could assign the result of ksort() to a unused variable and use the array for your output like this.
{$tmp = ksort($var)}
{$var}

Check value of two-dimensional array in php

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

Get value from a array

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.

Categories