Saparate array data with comma - php

I have an function that return an array
[0]=>
array(2) {
[0]=>
string(2) "22"
[1]=>
string(9) "Plantroom"
}
[1]=>
array(2) {
[0]=>
string(2) "22"
[1]=>
string(4) "dfdf"
}
}
sometime my array have one object or multiple .
[0]=>
array(2) {
[0]=>
string(2) "23"
[1]=>
string(4) "sec"
}
}
now I want to show my array data by comma separated.
like
for first array => Plantroom,dfdf
for second array =>sec
I am using this code but not work
my function
function area_name($game_id)
{
include_once('Model/Game.php');
$c2 = new Game();
$cd2 = $c2->Select_area($game_id);
return $cd2;
}
and call my function as
implode(", ", area_name($cd[$i][0]))
But my output show text Array

Because area_name() is not just returning an array, its returning an array of arrays. implode() will join the elements of the array that area_name() returns assuming they are strings, but those elements are also arrays and as such they are stringified to text "Array".
To obtain the desired output from implode() you would have to first generate an array with only the values you want from the structure returned by area_name().
For instance:
$data = array_map(function ($a) { return $a[1]; }, area_name($cd[$i][0]));
echo implode(', ', $data);

Related

Extract arrays with string to a new array

I know that there are some posts at SO with a similar issue, but none of those could really help me solving mine. I do have the following $test array:
array(1) {
[0]=>
array(4) {
[0]=>
array(2) {
["id"]=>
string(8) "40265656"
["text"]=>
string(29) "10' - 1st Corner - Terengganu"
}
[1]=>
array(2) {
["id"]=>
string(8) "40265715"
["text"]=>
string(25) "18' - 2nd Corner - Pahang"
}
[2]=>
array(2) {
["id"]=>
string(8) "40265770"
["text"]=>
string(29) "23' - 3rd Corner - Terengganu"
}
[3]=>
array(3) {
["id"]=>
string(8) "40265830"
["text"]=>
string(29) "26' - 4th Corner - Pahang"
}
}
}
and would like to extract only those arrays containing Pahang in the ["text"] key. First I have tried
$key = array_search('Pahang', $test);
and that gives me bool(false). What am I doing wrong here?
I think this way will be right:
$result = [];
foreach ($array[0] as $arr) {
if (strpos($arr['text'], "Pahang") !== false) {
$result[] = $arr;
}
}
The function array_search(...) searches for a value inside an array, but your array is not flat, it's multidimensional, this means you have one or more arrays inside another array.
In your case, you can use array_filter(...) that allows you to filter your array elements in a callable function.
So, initially you have to define a function that filters the elements:
function getPahang($element) {
return $element['text'] === 'Pahang'
}
This function returns true when the element text value is equal to 'Pahang', instead it returns false.
Now, you have to call array_filter, by passing your array and the callable function:
$new_array = array_filter($test[0], 'getPahang');
You can try a similar script here: http://sandbox.onlinephpfunctions.com/code/c076222dd6d1c6f2675d0241742e6c11da6eff53

How can I compare two arrays if inside the arrays some strings are similar?

I simply want to compare two strings
$result = array_diff($original, $new);
var_dump $original:
array(4) {
[0]=>
string(4) "8344"
[1]=>
string(4) "7076"
[2]=>
string(7) "6220940"
[3]=>
string(7) "6220940"
}
var_dump $new:
array(4) {
[0]=>
string(4) "8344"
[1]=>
string(4) "7076"
[2]=>
string(14) "6220940mistake"
[3]=>
string(7) "6220940"
}
var_dump $result:
array(0) {
}
But what I actually expect would be var_dump $result:
array(1) {
[2]=>
string(7) "6220940"
}
I found out that this is happening because I have two strings that are similar. So if every string is unique, there is no problem. But I do sometimes have also similar strings inside my array. Can you help me with this problem?
<?php
$a = array("8344", "7076", "6220940", "6220940");
$b = array("8344", "7076", "6220940mistake", "6220940");
var_export(array_diff_assoc($a,$b));
prints
array (
2 => '6220940',
)
see array_diff_assoc
You have empty result because all of the elements in $orginal array are present in array you are comparing against ($new) - value "6220940" is present at index 3.
You should use array_diff_assoc instead of array_diff so you will be comparing array elements with their index assignment.

How to access third level value in multidimensional mixed associative and numeric array

I am working with the array below and wish to ask how should I access/reference values in 'match_id' and 'match_comp_ID'?
I need to reference it in two ways: Question 1: firstly in a foreach statement. This has been answered below:
foreach $jason_a['matches'] as $match {
echo $match['match_id']
echo $match['match_comp_id']
}
Question 2: I want to sort the output from the above by those same two keys by using a sort function which I will call via usort:
function cmp($a, $b)
{
// sort by match_id
$retval = strnatcmp(substr($b->match_id,0,10), substr($a->match_id,0,10));
// if identical, sort by match_comp_id
if(!$retval) $retval = strnatcmp($a->match_comp_id, $b->match_comp_id);
return $retval;
}
usort($json_a, "cmp");
Using match_id or $json['match_id] format in the sort function don't work. I am at a loss to know what to search for.
Array is:
array(4) {
["APIRequestsRemaining"]=> int(920)
["matches"]=> array(3) {
[0]=> array(3) {
["match_id"]=> string(7) "1999477"
["match_static_id"]=> string(7) "1755895"
["match_comp_id"]=> string(4) "1204" }
[1]=> array(3) {
["match_id"]=> string(7) "1999478"
["match_static_id"]=> string(7) "1755891"
["match_comp_id"]=> string(4) "1204" }
[2]=> array(3) {
["match_id"]=> string(7) "1999479"
["match_static_id"]=> string(7) "1755894"
["match_comp_id"]=> string(4) "1204" }
}
["Action"]=> string(5) "today"
["Params"]=> array(4) {
["Action"]=> string(5) "today"
["APIKey"]=> string(31) "xxxx-xxxx-xxxx-xxxx"
["OutputType"]=> string(4) "JSON"
["comp_id"]=> string(4) "1204"
}
The php manual states:
Arrays and objects can not be used as keys. Doing so will result in a warning: Illegal offset type. I think this is my problem. But if arrays cannot be used as keys, then how do I access this key-value?
foreach ($json_a['matches'] as $match) {
// do something with $match['match_id'] and $match['match_comp_id']
}
For part 2 of your question, you really want to pass the 'matches' sub-array to your sort function:
$matches = $json_a['matches'];
usort($matches, 'cmp');
// now the $matches array should be sorted according to rules in function cmp()

Convert multidimensional array into single dimensional using values from child arrays

I have the following PHP/MYSQL query:
$sql = SELECT type, count(*) AS total FROM stats GROUP BY type
$this->sql = $sql;
function numObjects() {
$stats = $this->conn->query($this->sql);
while($stat_type = $stats->fetch_assoc()){
$category[] = $stat_type;
}
return $category;
}
It's a simple query, but I just can't figure out how to retrieve the data the way I want since it is returning a multidimensional array.
array(2) {
[0]=> array(2) {
["type"]=> string(4) "page"
["total"]=> string(1) "1"
}
[1]=> array(2) {
["type"]=> string(8) "category"
["total"]=> string(1) "1"
}
}
What I'm looking to do is convert the values from each array, into key => value pairs. Like this:
["page"]=> "1"
["category"]=> "1"
I've been able to convert it into a single dimensional array, but not in the correct format.
try this:
$new_array = array();
foreach ($old_array as $elem) {
$new_array[$elem["type"]] = $elem["total"];
}
var_dump($new_array); //for print the array
For PHP >= 5.5, I give you the array_column() function
$reformatted = array_column(
$category,
'total',
'type'
);

php array cut dimensions (return single 'row')

Is it possible to cut multiple dimensions in a php array?
example:
I want the 4th dimension of each first-level element
array(1) {
[0]=> array(5)
{
[0]=> string(_) "/opt/path [10823] (/home/path/file.xml)"
[1]=> string(_) "/opt/path"
[2]=> string(_) "10823"
[3]=> string(_) "(/home/path/file.xml)"
[4]=> string(_) "/home/path/file.xml"
}
}
=>
array(1){ ( [0]=> string(_) "/home/path/file.xml") }
is there an internal php function or a way to achieve this without a loop?
Use array_map :
function selectMyLine($line) {
return $line[4];
}
$result = array_map("selectMyLine", $data);
print_r($result);
You could alse do the same with array_walk, which directly edit your array instead of creating a new one.

Categories