Kani R
Kani R

Reputation: 123

How to make associative array using PHP

Here I want to make an associative array.

My code:

while($row = mysql_fetch_assoc($mysql)){
    $data[] = $row;
    print_r($row);
}

print_r($row);

Array
(
    [employeeTraveld] => 1
    [total_Trip] => 23
)
Array
(
    [employeeTraveld] => 2
    [total_Trip] => 9
)
Array
(
    [employeeTraveld] => 3
    [total_Trip] => 8
)
Array
(
    [employeeTraveld] => 4
    [total_Trip] => 7
)

Using this above array, I want to make my expected output like:

employeeTraveld is 1 means I have to change the key value like SingleemployeeTraveld and value is 23 (total_Trip)


employeeTraveld is 2 means I have to change the key value like TwoemployeeTraveld and value is 9 (total_Trip)


employeeTraveld is 3 means I have to change the key value like ThreeemployeeTraveld and value is 8 (total_Trip)


employeeTraveld is 4 means I have to change the key value like FouremployeeTraveld and value is 7 (total_Trip)

Finally my expected result should come like this:

Array
(
    [SingleemployeeTraveld] => 23
    [TwoemployeeTraveld] => 9
    [ThreeemployeeTraveld] => 8
    [FouremployeeTraveld] => 7
)

My Updated Code

include 'dbconfig.php';
require('Numbers/Words.php');
date_default_timezone_set('Asia/Kolkata');

$sql = "SELECT EmpId as employeeTraveld, Count(tripId) AS total_Trip
  FROM
  (
  SELECT COUNT(empID) AS empID, tm.tripID
  FROM trip_member as tm
  INNER JOIN trip_details as td
  ON tm.tripId = td.tripId
  WHERE tripDate BETWEEN '$today' AND '$today'
  GROUP BY 
  tripid
  ) AS trip_member
  GROUP BY
  EMPID
  ORDER BY
  EMPID";
$mysql = mysql_query($sql);
while($row = mysql_fetch_assoc($mysql)){
    $newArray = new array();

    foreach($row as $key=>$value){
         $numberToWord = new Numbers_Words();
         $newkeyWord = ucfirst($numberToWords->toWords($value["employeeTraveld"]));
         $newkey = $newkeyWord.$value["employeeTraveld"];
         $newArray[$newkey] = $value["total_Trip"];
    }
}
print_r($newArray);

Upvotes: 2

Views: 288

Answers (4)

narayansharma91
narayansharma91

Reputation: 2353

Please try This

$finalData = array();

while($row = mysql_fetch_assoc($mysql)){

$finalData[] = array( convertToWord($row['employeeTraveld']).'employeeTraveld' => $row['value'] );

}

print_r($finalData);

function convertToWord($number) {

$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);

return $f->format($number);

}

Upvotes: 0

Bhaskar Jain
Bhaskar Jain

Reputation: 1691

Convert number into words - plz check https://www.phptpoint.com/convert-number-into-words-in-php/ with the help of using this function, I tried to figure it out:

function numberTowords($num) {
    $ones = array(
        1 => "one",
        2 => "two",
        3 => "three",
        4 => "four",
        5 => "five",
        6 => "six",
        7 => "seven",
        8 => "eight",
        9 => "nine",
        10 => "ten",
        11 => "eleven",
        12 => "twelve",
        13 => "thirteen",
        14 => "fourteen",
        15 => "fifteen",
        16 => "sixteen",
        17 => "seventeen",
        18 => "eighteen",
        19 => "nineteen"
    );
    $tens = array(
        1 => "ten",
        2 => "twenty",
        3 => "thirty",
        4 => "forty",
        5 => "fifty",
        6 => "sixty",
        7 => "seventy",
        8 => "eighty",
        9 => "ninety"
    );
    $hundreds = array(
        "hundred",
        "thousand",
        "million",
        "billion",
        "trillion",
        "quadrillion"
    ); //limit t quadrillion 
    $num = number_format($num, 2, ".", ",");
    $num_arr = explode(".", $num);
    $wholenum = $num_arr[0];
    $decnum = $num_arr[1];
    $whole_arr = array_reverse(explode(",", $wholenum));
    krsort($whole_arr);
    $rettxt = "";
    foreach ($whole_arr as $key => $i) {
        if ($i < 20) {
            $rettxt .= $ones[$i];
        } elseif ($i < 100) {
            $rettxt .= $tens[substr($i, 0, 1)];
            $rettxt .= "" . $ones[substr($i, 1, 1)];
        } else {
            $rettxt .= $ones[substr($i, 0, 1)] . "" . $hundreds[0];
            $rettxt .= "" . $tens[substr($i, 1, 1)];
            $rettxt .= "" . $ones[substr($i, 2, 1)];
        }
        if ($key > 0) {
            $rettxt .= "" . $hundreds[$key] . "";
        }
    }
    if ($decnum > 0) {
        $rettxt .= "and";
        if ($decnum < 20) {
            $rettxt .= $ones[$decnum];
        } elseif ($decnum < 100) {
            $rettxt .= $tens[substr($decnum, 0, 1)];
            $rettxt .= "" . $ones[substr($decnum, 1, 1)];
        }
    }
    return $rettxt;
}

$arr = array(
    array(
        'employeeTraveld' => 1,
        'total_Trip' => 23
    ),
    array(
        'employeeTraveld' => 2,
        'total_Trip' => 9
    ),
    array(
        'employeeTraveld' => 3,
        'total_Trip' => 8
    ),
    array(
        'employeeTraveld' => 4,
        'total_Trip' => 7
    ),
);
foreach ($arr as $subArr) {
    $numText = numberTowords($subArr['employeeTraveld']);
    $newKey = ucfirst($numText) . 'employeeTraveld';
    $newArray[$newKey] = $subArr['total_Trip'];
}
echo "<pre>";
print_r($newArray);

Demo

Update

you can write these lines after foreach:

if(!empty($newArray)){
    $data['status'] = 'success';
    $data['data'] = array($newArray);
    echo json_encode($data);
}

Upvotes: 1

Rp9
Rp9

Reputation: 1963

$newarray = array();
foreach($array as $array2){

    if($array2['employeeTraveld'] == 1){
        $newarray['SingleemployeeTraveld'][] =  $array2['total_Trip'];
    }
    if($array2['employeeTraveld'] == 2){
        $newarray['TwoemployeeTraveld'][] =  $array2['total_Trip'];
    }
    if($array2['employeeTraveld'] == 3){
        $newarray['ThreeemployeeTraveld'][] =  $array2['total_Trip'];
    }
    if($array2['employeeTraveld'] == 4){
        $newarray['FouremployeeTraveld'][] =  $array2['total_Trip'];
    }
}
echo json_encode($newarray);

Upvotes: 1

SRK
SRK

Reputation: 3506

require('Numbers/Words.php');

$newArray = new array();
foreach($row as $key=>$value){
 $numberToWord = new Numbers_Words();
 $newkeyWord = ucfirst($numberToWords->toWords($value["employeeTraveld"]));
 $newkey = $newkeyWord.$value["employeeTraveld"];
 $newArray[$newkey] = $value["total_Trip"];
}

print_r($newArray);

You can use this script. First loop through the array. You have a numeric values so you need to get the text from that. I,e 1 to One, 2 to Two, etc.

For this purpose we have use $numberToWord = new Numbers_Words(); and then $newkeyWord = ucfirst($numberToWords->toWords($value["employeeTraveld"])); here toWords return one if the number is 1, two if the string is 2 and so on. We have used ucfirst to convert first letter into capital. Finally when we have our key ready i.e OneemployeeTraveld, TwoemployeeTraveld, etc, we have added respective total_Trip to that key in newArray. You will get the expected output in newArray.

Here is a documentation link for Numbers_Words() You need to use this package for that.Include this in your file.

Number_Words

Ucfirst

Upvotes: 0

Related Questions