簡體   English   中英

結合php數組和匹配值

[英]combine php array, with matching values

我有一組php數組

$arrayOne = (
    0 => new,
    1 => old,
    2 => fresh,
    3 => new,
    4 => old,
    5 => fresh,
    6 => new,
    7 => old,
    8 => fresh,

    )
$arrayTwo = (
   0 => yellow,
   1 => green,
   2 => red,
   3 => blue,
   4 => grey,
   5 => orange,
   6 => purple,
   7=> pink,
   8 => brown
   )
$arrayThree = (
  0 => Monday
  1 => Tuesday
  2 => Wednesday
  3 => Thursday
  4 => Friday
  5 => Saturday
  6 => Sunday
  7 => Monday2
  8 => Monday3
  )

這些數組正在循環並放置在表中

for($index = 0; index < 100; $index++){

 $returnVariable .= '<td>'.$ArrayOne[$index].'</td>';
 $returnVariable .= '<td>'.$ArrayTwo[$index].'</td>';
 $returnVariable .= '<td>'.$ArrayThree[$index].'</td>';

}

當返回並顯示在頁面上時,該表將按預期工作,並且所有與預期的匹配的工作

new    yellow    monday
old    green     tuesday
fresh  red       wednesday

等等,我想將第一列分組,以便它列出所有“新”,然后所有“舊”,然后所有新的,同時保留預期的匹配項,

new   yellow     monday
new   blue       thursday
new   purple     sunday
old   green      tuesday
old   grey       friday
old   pink       Monday2 

首先,將三個陣列合並為一個。 然后,按第一個值對新數組進行排序(首先是新值,然后是舊值,然后是新值):

<?php    
$arrayOne = [
    0 => "new",
    1 => "old",
    2 => "fresh",
    3 => "new",
    4 => "old",
    5 => "fresh",
    6 => "new",
    7 => "old",
    8 => "fresh",

];
$arrayTwo = [
   0 => "yellow",
   1 => "green",
   2 => "red",
   3 => "blue",
   4 => "grey",
   5 => "orange",
   6 => "purple",
   7=> "pink",
   8 => "brow"
];
$arrayThree = [
  0 => "Monday",
  1 => "Tuesday",
  2 => "Wednesday",
  3 => "Thursday",
  4 => "Friday",
  5 => "Saturday",
  6 => "Sunday",
  7 => "Monday2",
  8 => "Monday3",
];
echo "<pre>";
for ($i = 0; $i < count($arrayOne); $i++) {
    $array[] = [
        $arrayOne[$i],
        $arrayTwo[$i],
        $arrayThree[$i],
    ];
}
$values = [ // give these strings a numeric value to compare them
    "new" => 0,
    "old" => 1,
    "fresh" => 2,
];
usort($array, function($a, $b) use ($values) {
    return $values[$a[0]] - $values[$b[0]];
});

演示版

 Create new array to hold all then sort it and implode it into a string 
   <?php
    $arrayOne = array(
        0 => "new",
        1 => "old",
        2 => "fresh",
        3 => "new",
        4 => "old",
        5 => "fresh",
        6 => "new",
        7 => "old",
        8 => "fresh",

        );
    $arrayTwo = array(
       0 => "yellow",
       1 => "green",
       2 => "red",
       3 => "blue",
       4 => "grey",
       5 => "orange",
       6 => "purple",
       7=> "pink",
       8 => "brown"
       );
    $arrayThree =array(
      0 => "Monday",
      1 => "Tuesday",
      2 => "Wednesday",
      3 => "Thursday",
      4 => "Friday",
      5 => "Saturday",
      6 => "Sunday",
      7 => "Monday2",
      8 => "Monday3"
      );
    $returnVariable=array();
    for($index = 0; $index<count($arrayOne); $index++){

     $returnVariable[$index][0]= '<td>'.$arrayOne[$index].'</td>';
     $returnVariable[$index][1]= '<td>'.$arrayTwo[$index].'</td>';
     $returnVariable[$index][2]= '<td>'.$arrayThree[$index].'</td>';

    }
    sort($returnVariable);
    echo "<table>";
     for ($i=0; $i<count($returnVariable); $i++) {
            if (@is_array($returnVariable[$i])) 
                $returnVariable[$i] = implode($returnVariable[$i]," ");
    echo "<tr>";

        print $returnVariable[$i];
        echo "</tr>";

    }
    echo "</table>";

簡單的解決方案:

$arrayOne = array(0 => "new",1 => "old",2 => "fresh",3 => "new",4 => "old",5 => "fresh",6 => "new",7 => "old",8 => "fresh",);
$arrayTwo = array(0 => "yellow",1 => "green",2 => "red",3 => "blue",4 => "grey",5 => "orange",6 => "purple",7=> "pink",8 => "brown");
$arrayThree = array(0 => "Monday",1 => "Tuesday",2 => "Wednesday",3 => "Thursday",4 => "Friday",5 => "Saturday",6 => "Sunday",7 => "Monday2",8 => "Monday3");

$result = [];
foreach($arrayOne as $k => $v){
    $result[$v][] = "<tr><td>$v</td><td>{$arrayTwo[$k]}</td><td>{$arrayThree[$k]}</td></tr>";
}

echo '<table>';
foreach(['new', 'old', 'fresh'] as $k){
    echo implode("", $result[$k]);
}
echo '</table>';

輸出(推送“ Run code snippet ”):

 <table border="1"><tr><td>new</td><td>yellow</td><td>Monday</td></tr><tr><td>new</td><td>blue</td><td>Thursday</td></tr><tr><td>new</td><td>purple</td><td>Sunday</td></tr><tr><td>old</td><td>green</td><td>Tuesday</td></tr><tr><td>old</td><td>grey</td><td>Friday</td></tr><tr><td>old</td><td>pink</td><td>Monday2</td></tr><tr><td>fresh</td><td>red</td><td>Wednesday</td></tr><tr><td>fresh</td><td>orange</td><td>Saturday</td></tr><tr><td>fresh</td><td>brown</td><td>Monday3</td></tr></table> 

另一種方法是

 $row ="";
 $temp = array();
 foreach($arrayOne as $key => $value){
  $temp[$value][] = $key;
 }
foreach($temp as $value){
   foreach($value as $value2){
     $row .= ' '.$arrayOne[$value2].'';
     $row .= ' '.$arrayTwo[$value2].'';
     $row .= ' '.$arrayThree[$value2]."\n";
   }
}
echo $row;

現場演示: https : //eval.in/850007

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM