3 items random aus json file

klausi89

Erfahrenes Mitglied
Hallo ich habe schon wieder ne frage

ich möchte aus meiner json file 3 items anzeigen aber das ganze random

das auslesen funktioniert super

PHP:
$myData = file_get_contents("./../faucetslistfp/json.php");
    $myObject = json_decode($myData);
    $myObjectMap = $myObject->list_data->normal->Dollar;

dargestellt wird das ganze dann so:

Code:
<div class="jumbotron">
<table id="example" class="table table-striped table-bordered table-hover table-responsive  order-column text-center" width="100%">
<tbody>
      <?php foreach($myObjectMap as $key => $item): ?>
<tr>
      <td><?PHP echo $item->name; ?></td>
      <td><?PHP echo '<img src="./../images/dollar.png" width="25" height="25" border="0" alt="Dollar" title="Dollar"'; ?></td>
      <td><button class="btn btn-primary hover-effect my-2 my-sm-0" onclick="window.open('<?PHP echo $item->url.'/?r='. $adress; ?>')">Visit <i class="fa fa-external-link"></i></button>


          </td>
        </tr>
      <?php endforeach; ?>
    </tbody>
  </table>
 </div>

das funktioniert bis hier her einwandfrei....

nun möchte ich aber nur 3 items in Random auswählen und anzeigen.

Könnte mir da bitte mal jemand helfen?
So gut ist mein PHP dann leider doch nicht.

Danke im voraus
 
Welche 3 Objekte willst du mischen?
Ich sehe nur den einen Wert Dollar.

Oder stehen in $myObjectMap 3 Werte?
Wenn ja, mach mal ein var_dump($myObjectMap); und poste das Resultat, damit man mal sieht was das Ding ist.
 
Na durch Dollar werden alle items mit Dollar aus der json geholt... ( funktioniert wie gesagt aber eben ellen lange Liste)
Außerdem gibt es noch Euro und Pfund

Bräuchte aber wie gesagt nur immer 3 davon ( random)

Var_dump geht gerade nicht bin aufm Weg zur Schicht bzw. Listet alle items die Dollar verwenden auf
 
Ist halt nicht einfach zu helfen, wenn man keine Ahnung hat wie die Daten aufgebaut sind.
OK, es kommen viele Einträge und du willst einfach 3 davon auswählen.
Ich geh mal davon aus, $myObjectMap ist ein Array oder ein ArrayObject.

Dann kannst du doch mit PHP: array_rand - Manual arbeiten
 
Genau das ist ein array daraus nehme ich den Namen und die dazugehörige URL...

Ok mit array_rand hab ich noch nicht gearbeitet...probiere es heute Abend mal und hoffe es kommt was dabei rum...:)
 
Hallo ich hab das nochmal etwas abgeändert aber wie ich nun nur 3 Namen (plus dazugehörige Url) random abrufen kann ist mir weiterhin nicht verständlich

Code:
    $myData = file_get_contents("./../faucetslistfp/json.php");
    $myObject = json_decode($myData);
    $linklist = $myObject->list_data->normal->Dollar;

var_dump($linklist); ergibt folgendes......

Code:
object(stdClass)#30 (167)
{ ["0"]=> object(stdClass)#29 (16)
{ ["id"]=> string(2) "16"
  ["name"]=> string(17) "yourearn - Dollar"
  ["url"]=> string(19) "https://dollarearn.example/"
  ["owner_id"]=> string(2) "11"
  ["owner_name"]=> string(7) "dollarman"
  ["currency"]=> string(3) "DOLLAR"
  ["timer_in_minutes"]=> string(2) "30"
  ["reward"]=> string(1) "4"
  ["is_enabled"]=> string(1) "1"
  ["creation_date"]=> string(10) "1575504000"
  ["category"]=> string(17) "1,2,3,4,5,6,7,8,9"
  ["paid_today"]=> string(9) "24.410697"
  ["total_users_paid"]=> string(4) "4244"
  ["active_users"]=> string(4) "7631"
  ["balance"]=> string(10) "13.00834732"
  ["health"]=> string(3) "100" }
 
  ["1"]=> object(stdClass)#31 (16)
{ ["id"]=> string(3) "107"
  ["name"]=> string(15) "earn dollars"
  ["url"]=> string(23) "https://freedollar.example"
  ["owner_id"]=> string(3) "734"
  ["owner_name"]=> string(10) "uniquedollars"
  ["currency"]=> string(3) "DOLLAR"
  ["timer_in_minutes"]=> string(2) "60"
  ["reward"]=> string(4) "4632"
  ["is_enabled"]=> string(1) "1"
  ["creation_date"]=> string(10) "1575616127"
  ["category"]=> string(7) "1,3,4,9"
  ["paid_today"]=> string(8) "5.438821"
  ["total_users_paid"]=> string(1) "8"
  ["active_users"]=> string(2) "72"
  ["balance"]=> string(10) "82.00463676"
  ["health"]=> string(3) "100" }

  ["2"]=> object(stdClass)#32 (16)
{ ["id"]=> string(3) "127"
  ["name"]=> string(15) "Daily Free Money"
  ["url"]=> string(24) "http://dailyfreemoney.example"
  ["owner_id"]=> string(4) "1760"
  ["owner_name"]=> string(13) "dailyfreemoney"
  ["currency"]=> string(3) "DOLLAR"
  ["...................usw.


Mit diesem rufe ich aus der Liste den Namen und die dazugehörige Url ab dies funktioniert einwandfrei, nur eben sind das mehr wie 160 einträge und ich hätte gerne das jedesmal nur 3 angezeigt werden und eben random aus der liste ausgewählt werden.

Code:
<div class="jumbotron">
<table id="example" class="table table-striped table-bordered table-hover table-responsive  order-column text-center" width="100%">
<tbody>
      <?php foreach($linklist as $key => $item):

        echo '<tr>';
        echo '<td class="col-sm-9">'. $item->name .'</td>';
        echo '<td><img src="./../images/'. $imgname.'" width="25" height="25" border="0"</td>';
        echo '<td class="col-sm-3"><a class="btn btn-info hover-effect py-1" onclick="window.open(&quot;' .$item->url.'/?r='. $adress .'&quot;);" href="javascript:void(0);" rel="nofollow noopener">Visit <i class="fas fa-external-link-alt"></i></a></td>';
        echo '</tr>';

        endforeach;
       ?>

    </tbody>
  </table>
 </div>

mit array_rand hab ich schon probiert aber ehrlich gesagt weiß ich garnicht richtig wie ich da ran gehen soll.
Ist leider neuland für mich....
 
$linklist ist also ein Objekt, nicht ein array. Also zuerst ein Array draus machen.

Hier ein Test, den du auf PhpFiddle Main testen kannt
PHP:
<pre><?php
//Testdaten mit Objekten
$objLinkList = (object) array(
        (object) array('id' => 11, 'name' => 'abc'), 
        (object) array('id' => 12, 'name' => 'def'),
        (object) array('id' => 13, 'name' => 'ghi'),
        (object) array('id' => 14, 'name' => 'jkl'),
        (object) array('id' => 15, 'name' => 'mno'),
        (object) array('id' => 16, 'name' => 'pqr')
    );
//Testausgabe der ganzen Objektliste
print_r($objLinkList);

//Aus dem Object ein Array erstellen
$arrLinkList = (array) $objLinkList;

//3 beliebige Keys auswählen
$arrResultKeys = array_rand($arrLinkList, 3);
//ausgewählte Keys ausgeben
print_r($arrResultKeys);

//Anhand der Keys die Datensätze auswählen.
$arrResult = array_intersect_key($arrLinkList, array_flip($arrResultKeys));

print_r($arrResult);
?></pre>
 
Ist ja alles erklärt. Und wenn du den Code so mal testest (zb auf PhpFiddle Main) dann siehst du auch alle Zwischenresultate.
Wenn du ein Befehl nicht kennst, dann schau in der Online-Hilfe.

Ansonsten, was verstehst du nicht?
 
na woher kommt jez objLinklist .... soll ich jez so eine liste erstellen?
ach keine Ahnung das übersteigt bei weitem meine kenntnisse
 
Zurück