Bonjour à tous je cherche aujourd'hui à changer le type d'une valeur dans un tableau comme vous avez pu le voir dans le titre.
En effet j'utilise une librairie pour créer des graphiques (Highcharts) avec CakePHP. Pour créer un graphique je dois lui donner des valeurs, dans mon cas, des pseudos et des valeurs entières (des nombres).
Cependant lorsque je vais chercher ces nombres dans ma base de données, j'obtient quelque chose comme ça

array(
    (int) 1 => '75',
    (int) 2 => '40'
)

Alors qu'il me faudrait ça

array(
    (int) 1 => (int) 75,
    (int) 2 => (int) 40'
)

En effet la librairie que j'utilise veut absolument un entier, mais c'est un chaîne de caractères qui ressort de la base de données (le champs dans la bdd est bien en int).

Je n'ai trouvé aucune solution à mon problème j'ai simplement la fonction settype de php qui pourrait être utile mais elle n'est appliquable qu'à une variable...

Si vous avez une solution, elle sera la bienvenue, merci à vous et bonne soirée !

10 réponses


kewai
Réponse acceptée

Tu es dur en affaire

$i = ['45', 5, 6, 489 , '65'];
var_dump($i);
settype($i[0], 'int');
var_dump($i);

si tu ignores le nombres de resultats qu'il te donnera il suffit d'en faire un foreach :)

C'est bizarre qu'il te numerote tes colonnes... un var_dump sorti tout droit d'un select il t'affiche tes colonnes dans les k,...
Ca doit etre un fantaisie de cakephp ?
Tu as essayé une requete à la main ?

MrSaooty
Auteur

Il numérote les colonnes car je fais une requête "list", une fantaisie de CakePHP oui :D

Je n'ai pas essayé avec une requête "à la main" et même si ça fonctionnait ça ne m'embeterais un petit peu car ça ne serait pas très propre

Avec un var_dump ça donne

array (size=2)
  1 => string '75' (length=2)
  2 => string '40' (length=2)

spéciale je viens de faire un var_dump chez moi j'ai bien mes int et mes string là où il faut. (gosh... quand je me relis je me dis qu'il faudrait pas que ça sorte du contexte)

$i = '45';
var_dump($i);
settype($i, 'int');
var_dump($i);
MrSaooty
Auteur

Oui mais tu utilises settype sur $i. Settype ne peut être utilisé que sur des variables, il ne peut pas être utilisé directement sur un tableau.

Je n'ai pas de variable moi mais simplement un tableau contient mes données.

MrSaooty
Auteur

Bon je vais repartir sur des bases seines au niveau de monde code. J'appelle la base de données normalement cette fois sans la fonction magique "list" de CakePHP.

array(
    (int) 0 => array(
        'donationLadder' => array(
            'tokens' => '75'
        )
    ),
    (int) 1 => array(
        'donationLadder' => array(
            'tokens' => '40'
        )
    ),
    (int) 2 => array(
        'donationLadder' => array(
            'tokens' => '100'
        )
    )
)

Sauf que moi ça je ne peux rien en faire pour mon graphique. Il faut maintenant que j'arrive à ça

array(
    (int) 0 => (int) 75,
    (int) 1 => (int) 40,
    (int) 2 => (int) 100
)
$array = [
            [ 'donationLadder' => [ 'tokens' => '75'] ],
            [ 'donationLadder' => [ 'tokens' => '40'] ],
            [ 'donationLadder' => [ 'tokens' => '100'] ]
            ];

var_dump($array);

foreach ($array as $value) {
    $list = array_values($value);
    foreach ($list as $value2) {
        $step2 = array_values($value2);

            foreach ($step2 as $data) {
                $compact[] = intval($data);
            }
    }

}

var_dump($compact);

Quelque chose ainsi, ca te parlerait mieux ?
Après je sais pas si c'est la meilleur des options... Après j'ai agis sur ton tableau en le refaisant, il y a peut-être moyen de travailler en amont pour ce pas devoir faire ceci...

Bonjour ,
un bête cast en int ne conviendrait pas?

$string = '5';
$int = (int) $string;

ah je connaissais pas ce raccourcis là :)

MrSaooty
Auteur

Du coup j'ai fini par faiire ça merci à vous

$dt[0] = $donatorsTokens[0]['donationLadder']['tokens'];
$dt[1] = $donatorsTokens[1]['donationLadder']['tokens'];
$dt[2] = $donatorsTokens[2]['donationLadder']['tokens'];
$dt[3] = $donatorsTokens[3]['donationLadder']['tokens'];
$dt[4] = $donatorsTokens[4]['donationLadder']['tokens'];
settype($dt[0], 'int');
settype($dt[1], 'int');
settype($dt[2], 'int');
settype($dt[3], 'int');
settype($dt[4], 'int');

Et du coup j'envoie le tableau $dt à mon graphique, mon tableau qui contient donc ce que j'attendais

array(
    (int) 0 => (int) 75,
    (int) 1 => (int) 40,
    (int) 2 => (int) 100,
    (int) 3 => (int) 50,
    (int) 4 => (int) 90
)