J'ai les résultats d'une requête mysql, j'aimerais ajouter un nouveau champ et remplir avec une valeur calculée que je voudrais ensuite trier, je suis nouveau avec l'ajout de champs aux tableaux et le tri des tableaux donc toute aide est apprécié, merci.

$keyArray = explode(" ", $keyPhrase);
$result = $mysqli->query($queryString);
while($row = $result->fetch_array()){
    $rows[] = $row;
}            
foreach($rows as $row){
    $bodyData = $row["bodydata"];
    $totalKeys = 0;
    foreach($keyArray as $value){
        $keyCount = substr_count($bodyData, $value);
        $totalKeys = $totalKeys + $keyCount;
                }
        // Here I'd like to add new field to $rows[] 
        // with $totalKeys value then sort by it desc after the this loop
     }
}
-1
JBD 11 oct. 2019 à 00:38

1 réponse

Meilleure réponse

Je l'ai fait fonctionner comme ceci:

foreach($rows as &$row){
        $bodyData = $row["bodydata"];
        $totalKeys = 0;
        foreach($keyArray as $value){
            $keyCount = substr_count($bodyData, $value);
            $totalKeys = $totalKeys + $keyCount;
        }                
        $row["sortcount"] = $totalKeys;                 
    }
    $rows = array_sort($rows, "sortcount", SORT_DESC);


function array_sort($array, $on, $order=SORT_ASC)
{
$new_array = array();
$sortable_array = array();

if (count($array) > 0) {
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            foreach ($v as $k2 => $v2) {
                if ($k2 == $on) {
                    $sortable_array[$k] = $v2;
                }
            }
        } else {
            $sortable_array[$k] = $v;
        }
    }

    switch ($order) {
        case SORT_ASC:
            asort($sortable_array);
        break;
        case SORT_DESC:
            arsort($sortable_array);
        break;
    }

    foreach ($sortable_array as $k => $v) {
        $new_array[$k] = $array[$k];
    }
}

return $new_array;
}
1
JLT 10 oct. 2019 à 23:04