webForumDet fria alternativet

Arrayer i en array

PHPur PHP

7 svar · 1 187 visningar · startad av oskars

oskarsMedlem sedan nov. 20051 317 inlägg
#1

Hej på er :)

Blir inte klok på detta. Hur skapar jag en sån här array från data som loopas ut från MySQL?

$cart = array(
    array(
        'reference' => '123456789',
        'name' => 'T-shirt',
        'quantity' => 2,
        'unit_price' => 12300,
        'discount_rate' => 1000,
        'tax_rate' => 2500
    ),
    array(
        'reference' => '987654321',
        'name' => 'Byxor',
        'quantity' => 2,
        'unit_price' => 22300,
        'discount_rate' => 1000,
        'tax_rate' => 2500
    ),
    array(
        'type' => 'shipping_fee',
        'reference' => 'SHIPPING',
        'name' => 'Shipping Fee',
        'quantity' => 1,
        'unit_price' => 4900,
        'tax_rate' => 2500
    )
);

Tacksam för hjälp!

EDIT: Det är en kundvagn som ska loopas ut för integration till Klarna.

metalboyMedlem sedan jan. 2005953 inlägg
#2

Hur ser din kod ut för att hämta ut datat från MySQL? Använder du PDO eller mysqli? Eller använder du de gamla mysql-funktionerna? Om du använder PDO eller mysqli så finns det inbyggda metoder för att hämta alla rader ur ett resultat (PDOStatement::fetchAll respektive mysqli_result::fetch_all). Använder du de gamla mysql-funktionerna loopar du igenom resultaten och lägger till varje rad i arrayen.

Exempel PDO

// Här behövs kod för att definiera $pdo...
$stmt = $pdo->prepare('SELECT * FROM table WHERE column=?');
if ($rows = $stmt->execute(array('some value')) {
    $array = $rows->fetchAll();
}
print_r($array);

Exempel mysqli

// Här behövs kod för att definiera $mysql...
if ($result = mysqli->query('SELECT * FROM table')) {
    $array = $result->fetch_all();
}
print_r($array);

Exempel med de gamla mysql-funktionerna

// Här behövs kod för att ansluta till databasen...
$result = mysql_query('SELECT * FROM table');
$array = array();
while ($row = mysql_fetch_assoc($result)) {
    $array[] = $row;
}
print_r($array);
oskarsMedlem sedan nov. 20051 317 inlägg
#3

Tack!!

Denna koden:

$sql = "SELECT * FROM minKundvagn WHERE customer_id = '".$_COOKIE['customer_id']."'";
	$result = $conn->query($sql);

	if ($result->num_rows > 0) {
		while($row = $result->fetch_assoc()) {
			
			$kundvagn[] = array(
							'reference' => $row['ID'],
							'name' => $row['Product'],
							'quantity' => $row["Antal"],
							'unit_price' => $row['Price']*100,
							'discount_rate' => 0,
							'tax_rate' => 2500
							);
			
		}
	}
        header('Content-type: text/plain');
	echo '<pre>'; print_r($kundvagn); echo '</pre>';

Ger mig detta resultatet:

	Array (
		[0] => Array
			(
				[reference] => 98320
				[name] => 496
				[quantity] => 1
				[unit_price] => 16900
				[discount_rate] => 10000
				[tax_rate] => 2500
			)

		[1] => Array
			(
				[reference] => 98308
				[name] => 373
				[quantity] => 1
				[unit_price] => 27900
				[discount_rate] => 10000
				[tax_rate] => 2500
			)

	);

Arrayen ser ju inte ut att vara i det formatet jag visade i första inlägget. Men det kanske inte ska spela någon roll i detta fallet?

metalboyMedlem sedan jan. 2005953 inlägg
#4

Jag tycker att den ser ut att vara i exakt samma format som du skrev i första inlägget förutom att du inte har tagit med alla nycklar i dimension 2 i arrayen. Du har också valt att lägga in heltal istället för strängar som värden i index 'name'.

oskarsMedlem sedan nov. 20051 317 inlägg
#5

Jo det är heltal där nu ja... Behöver jag använda '$text' för att det ska bli korrekt med textsträng?

Har textat med '".$text."' men får det inte att fungera.

metalboyMedlem sedan jan. 2005953 inlägg
#6

Du behöver inte göra någonting, om $text innehåller en sträng så kommer det att bli en sträng i arrayen. Om $text innehåller ett heltal så blir det ett heltal i arrayen.

prplxrMedlem sedan juni 2012582 inlägg
#7

oskars skrev:

Jo det är heltal där nu ja... Behöver jag använda '$text' för att det ska bli korrekt med textsträng?

Har textat med '".$text."' men får det inte att fungera.

Det där lyckades jag inte riktigt klura ut vad du menade med. Var är $text? Är jag blind?

metalboy skrev:

Du behöver inte göra någonting, om $text innehåller en sträng så kommer det att bli en sträng i arrayen. Om $text innehåller ett heltal så blir det ett heltal i arrayen.

Jag brukar inte våga lite på att den automagiska typecastingen fungerar som jag tänkt. Om man är osäker kan man alltid se ifall det är ett numeriskt värde i en textsträng med is_numeric() och om det visar sig vara det kan man casta om den manuellt med (int) $text.

oskarsMedlem sedan nov. 20051 317 inlägg
#8

Äh glöm :D Förvirrade mig lite!

Det fungerar jättebra. Tack för hjälpen!

128 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)