简体   繁体   English

通过两个数组对多维数组排序

[英]Sorting multidimensional array by two arrays PHP

So I got stuck with my friends PHP script. 所以我被朋友的PHP脚本卡住了。 What I want to do is sort pavadinimas and If there is more than one the same pavadinimas then sort by o_pavadinimas , this part is ok. 我想做的是那种pavadinimas ,如果有一个以上的同pavadinimas然后排序o_pavadinimas ,这部分是确定的。 But then all the information goes randomly. 但是,所有信息都是随机的。 I mean I sort only columns, but not rows. 我的意思是我只对列排序,而不对行排序。 Do you have any ideas guys, cause i ran out of it... 你们有想法吗,因为我用光了...

<?php

$file = "Muniko dešros&nbsp;Abraitis&nbsp;Vilius.munikas@gmail.com&nbsp;Www.abraitis.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Muniko dešros&nbsp;Belenkas&nbsp;Vilius.munikas@gmail.com&nbsp;Www.belenkas.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Tomo dešros&nbsp;Abraitis&nbsp;tomas@gmail.com&nbsp;Www.abraitis.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Tomo dešros&nbsp;Belenkas&nbsp;tomas@gmail.com&nbsp;Www.belenkas.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Dino dešros&nbsp;Dešrynas&nbsp;dinas@gmail.com&nbsp;Www.derynas.lt&nbsp;Dinas&nbsp;Šukuosena&nbsp;Dino dešros&nbsp;Abraitis&nbsp;dinas@gmail.com&nbsp;Www.abraitis.lt&nbsp;Dinas&nbsp;Šukuosena&nbsp;";

$masyvas = explode("&nbsp;", $file);
$x = count($masyvas);
print_r($masyvas);

$rikiavimas = array (
  'pavadinimas' => '',
  'o_pavadinimas' => '',
  'email' => '',
  'svetaines_adresas' => '',
  'vardas' => '',
  'pavarde' => ''
);       
$c=0;
while($c < $x-4){
$rikiavimas['pavadinimas'][] = $masyvas[$c+0];
$rikiavimas['o_pavadinimas'][] = $masyvas[$c+1];
$rikiavimas['email'][] = $masyvas[$c+2];
$rikiavimas['svetaines_adresas'][] = $masyvas[$c+3];
$rikiavimas['vardas'][] = $masyvas[$c+4];
$rikiavimas['pavarde'][] = $masyvas[$c+5];
$c+=6;
}
array_multisort($rikiavimas['pavadinimas'], SORT_ASC, SORT_REGULAR, $rikiavimas['o_pavadinimas']);

$pirmas=count($rikiavimas['pavadinimas']);
print_r($rikiavimas);
?>


<table class="table" align="center" width="800" border="1" cellspacing="0" cellpadding="3">
<tr>
<td align="center"><strong>Produkto pavadinimas</strong></td>
<td align="center"><strong>Organizacijos pavadinimas</strong></td>
<td align="center"><strong>El. paštas</strong></td>
<td align="center"><strong>Svetainės adresas</strong></td>
<td align="center"><strong>Vardas</strong></td>
<td align="center"><strong>Pavardė</strong></td>
</tr>
 <?php
$y=0;
while($y < $pirmas){
echo "<td>" . $rikiavimas['pavadinimas'][$y] . "</td>";
echo "<td>" . $rikiavimas['o_pavadinimas'][$y] . "</td>";
echo "<td>" . $rikiavimas['email'][$y] . "</td>";
echo "<td>" . $rikiavimas['svetaines_adresas'][$y] . "</td>";
echo "<td>" . $rikiavimas['vardas'][$y] . "</td>";
 echo "<td>" . $rikiavimas['pavarde'][$y] . "</td>";
echo "</tr>";
$y++;
}
?>
 <?php

?>
</table>

EDIT: Ignore the print_r it's just for testing 编辑:忽略仅用于测试的print_r

The problem is related with a wrong usage of array_multisort. 该问题与array_multisort的错误使用有关。 Currently, you're only sorting arrays $rikiavimas['pavadinimas'] and $rikiavimas['o_pavadinimas'] . 当前,您只对数组$ rikiavimas ['pavadinimas']$ rikiavimas ['o_pavadinimas']排序

Arrays: 数组:

  • $rikiavimas['email'] $ rikiavimas ['email']
  • $rikiavimas['svetaines_adresas'] $ rikiavimas ['svetaines_adresas']
  • $rikiavimas['vardas'] $ rikiavimas ['vardas']
  • $rikiavimas['pavarde'] $ rikiavimas ['pavarde']

are left unmodified. 保持不变。 array_multisort doesn't know anything about these 4 arrays. array_multisort对这4个数组一无所知。

I've modified a little bit your code => I've switched $rikiavimas[name][index] to $rikiavimas[index][name]. 我已经修改了您的代码=>我已经将$ rikiavimas [name] [index]切换为$ rikiavimas [index] [name]。

<?php

$file = "Muniko dešros&nbsp;Abraitis&nbsp;Vilius.munikas@gmail.com&nbsp;Www.abraitis.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Muniko dešros&nbsp;Belenkas&nbsp;Vilius.munikas@gmail.com&nbsp;Www.belenkas.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Tomo dešros&nbsp;Abraitis&nbsp;tomas@gmail.com&nbsp;Www.abraitis.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Tomo dešros&nbsp;Belenkas&nbsp;tomas@gmail.com&nbsp;Www.belenkas.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Dino dešros&nbsp;Dešrynas&nbsp;dinas@gmail.com&nbsp;Www.derynas.lt&nbsp;Dinas&nbsp;Šukuosena&nbsp;Dino dešros&nbsp;Abraitis&nbsp;dinas@gmail.com&nbsp;Www.abraitis.lt&nbsp;Dinas&nbsp;Šukuosena&nbsp;";
$masyvas = explode("&nbsp;", $file);

$columns = 6;
$rikiavimas = array();
$masyvas = array_chunk($masyvas, $columns);

foreach ($masyvas as $value) {
  if (count($value) < $columns) continue;
  list($tmp['pavadinimas'],
       $tmp['o_pavadinimas'],
       $tmp['email'],
       $tmp['svetaines_adresas'],
       $tmp['vardas'],
       $tmp['pavarde']
   ) = $value;
   $rikiavimas[] = $tmp;
 }

 $sort = array();
 foreach($rikiavimas as $v) {
     $sort['pavadinimas'][] = $v['pavadinimas'];
     $sort['o_pavadinimas'][] = $v['o_pavadinimas'];
 }

 array_multisort($sort['pavadinimas'], SORT_ASC, SORT_REGULAR, $sort['o_pavadinimas'], SORT_ASC, SORT_REGULAR, $rikiavimas);
?>

<table class="table" align="center" width="800" border="1" cellspacing="0" cellpadding="3">
<tr>
<td align="center"><strong>Produkto pavadinimas</strong></td>
<td align="center"><strong>Organizacijos pavadinimas</strong></td>
<td align="center"><strong>El. paštas</strong></td>
<td align="center"><strong>Svetainės adresas</strong></td>
<td align="center"><strong>Vardas</strong></td>
<td align="center"><strong>Pavardė</strong></td>
</tr>
 <?php
foreach ($rikiavimas as $row) {
 echo "<td>" . $row['pavadinimas'] . "</td>";
 echo "<td>" . $row['o_pavadinimas'] . "</td>";
 echo "<td>" . $row['email'] . "</td>";
 echo "<td>" . $row['svetaines_adresas'] . "</td>";
 echo "<td>" . $row['vardas'] . "</td>";
 echo "<td>" . $row['pavarde'] . "</td>";
 echo "</tr>";
}
?>
</table>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM