2017-06-07 5 views
0

Ich versuche ein Skript zu erstellen, das zwei Dinge tut. 1) Die Zahlen sollten nicht wiederholt werden. 2) Die Zahlen sollten von einem Array namens $ ID stammen.PHP sollte nicht wiederholen und sollte von einem Array sein

<?php 
$a = array(); // final array which will have our id's to display 
$id = array(1, 3, 5, 7, 9); //final array should contain a number only from this list 
$itemstoshow = 3; // how many items to display 
for($i = 0; $i < $itemstoshow; $i++) { 
    do { 
     $a[$i] = assignid(9); 
     $chkid = checkeer($a[$i], $i); 
     $chkdata = chkdata($a[$i], $i); 
    } while($chkdata == "nonexist" or $chkid == "repeatedid"); 
} 

// display numbers in the array 
for($i = 0; $i < $itemstoshow; $i++) { 
    echo "Item " . $a[$i] . "--------"; 
} 

// check for redundancy function 
function checkeer($x, $y) 
{ //first parameter is query aray second is counter 
    global $a; 
    $err = 0; 
    // check if repeating number 
    for($i = 0; $i <= $y - 1; $i++) { 
     if($x == $a[$i]) { 
      $err = 1; 
     } 
    } 
    if($err == 1) { 
     return "repeatedid"; 
    } 
} 

//check if array $a holds value from $id or not 
function chkdata($x, $y) 
{ 
    global $a; 
    global $id; 
    for($i = 0; $i <= $y - 1; $i++) { 
     if($x !== $id[$i]) { 
      return "nonexist"; 
     } 
    } 

} 

//assign id function 
function assignid($x) 
{ 
    return rand(1, $x); 
} 

Problem Nummer 1 gelöst Problem Nummer 2 immer noch nicht gelöst bitte helfen Sie mir. sollte der Code 3 Zahlen von 1 bis 9 zeigen die wiederholen DONot und sind im Array $ id

+0

Vielleicht möchten Sie schauen in die [in_array Funktion] (http://php.net/manual /de/function.in-array.php). – aynber

+0

Ich möchte es in prozeduraler Weise getan werden. Wenn ich die chkdata-Funktion nicht verwende, funktioniert es gut, aber es stellt nur sicher, dass sich Zahlen nicht wiederholen. aber irgendwo gibt es einen Fehler mit der Funktion chkdata. Jemand muss mir sagen wo. –

+0

Ein Hinweis (das wäre, was wir tun würden, um das Problem zu finden) ist zu [Rubber Duck Debug] (https://rubberduckdebugging.com/) Ihr Code – FirstOne

Antwort

1

Sie array_rand verwenden können, die zufällige Schlüssel wählt:

$id = array(1,3,5,7,9); 
$result = array_intersect_key($id, array_flip(array_rand($id, 3))); 

Oder Sie können das Array shuffle und nehmen für Beispiel sind die drei ersten Punkte:

$id = array(1,3,5,7,9); 
$temp = $id; 
shuffle($temp); 
for ($i = 0; $i < 3; $i++) { 
    $result[] = $temp[$i]; 
} 
+0

danke. Ich werde tatsächlich einfügen $ ID = Array (1,3,5,7,9); // Das finale Array sollte nur eine Nummer aus dieser Liste enthalten $ itemstoshow = 3; $ values ​​= array_map (function ($ item) verwenden ($ id) { return $ id [$ item]; }, array_rand ($ id, $ itemstoshow)); Ich bin ein Neuling. Sorry für die irritierende Sie :) print_r ($ Werte); –

1

Sie eine Kombination aus array_rand verwenden könnte und array_map zufällige Werte aus dem Array zu erhalten, die die Werte Ihrer stützen die Zufalls hat ierung. Werfen Sie einen Blick:

$id = array(1,3,5,7,9); //final array should contain a number only from this list 
$itemstoshow = 3; 
$values = array_map(function($item) use($id){ 
    return $id[$item]; 
}, array_rand($id, $itemstoshow)); 

print_r($values); 

Ausgang:

Array 
(
    [0] => 1 
    [1] => 3 
    [2] => 9 
) 

wieder Rennen:

Array 
(
    [0] => 3 
    [1] => 7 
    [2] => 9 
) 
+0

vielen Dank. Wenn es Ihnen nichts ausmacht, überprüfen Sie bitte meinen Code und sagen Sie mir, wie kann ich es in der prozeduralen Weise tun. Wo liege ich falsch. –

Verwandte Themen