2016-05-02 18 views
0

だから、私の友人PHPのスクリプトで立ち往生した。私がしたいことは、並べ替えpavadinimasです。同じものが複数ある場合は、pavadinimasを並べ替え、次に並べ替えをo_pavadinimasとすれば、この部分はOKです。しかし、すべての情報はランダムに行きます。私は列だけをソートするが行はソートしないことを意味する。私はそれを使い果たした原因あなたは、任意のアイデアの男を持っていますか...多次元配列を2つの配列で並べ替えるPHP

<?php 

$file = "Muniko dešros&nbsp;Abraitis&nbsp;[email protected]&nbsp;Www.abraitis.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Muniko dešros&nbsp;Belenkas&nbsp;[email protected]&nbsp;Www.belenkas.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Tomo dešros&nbsp;Abraitis&nbsp;[email protected]&nbsp;Www.abraitis.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Tomo dešros&nbsp;Belenkas&nbsp;[email protected]&nbsp;Www.belenkas.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Dino dešros&nbsp;Dešrynas&nbsp;[email protected]&nbsp;Www.derynas.lt&nbsp;Dinas&nbsp;Šukuosena&nbsp;Dino dešros&nbsp;Abraitis&nbsp;[email protected]&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:それだけで問題がarray_multisortの誤った使用方法に関連している

+1

「情報はランダムに表示されます」という意味を明確にしてください。私はちょうどあなたのコードをPHPファイルに貼り付けてコピーし、あなたが必要としているのと同じように、完全にデータが入っていてソートされたテーブルを表示しました。 –

+0

ここに私が見るもののスクリーンショットがあります。 http://postimg.org/image/3pep730wh/ –

+0

@RubenFunai tho最初の列はソートされていますが、他の列はそのまま残っています。だから、テーブル全体ではなく2つの列をソートすると、情報はランダムに表示されます –

答えて

1

をテストするためだprint_rを無視します。現在、配列をソートするだけです$ rikiavimas ['pavadinimas']$ rikiavimas ['o_pavadinimas']

アレイ:

  • $ rikiavimas [ 'メール']
  • $ rikiavimas [ 'svetaines_adresas']
  • $ rikiavimas [ 'vardas']
  • $ rikiavimas [ 'pavarde']

は変更されません。 array_multisortはこれら4つの配列について何も知らない。

コードを少し変更しました=> $ rikiavimas [name] [index]を$ rikiavimas [index] [name]に変更しました。

<?php 

$file = "Muniko dešros&nbsp;Abraitis&nbsp;[email protected]&nbsp;Www.abraitis.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Muniko dešros&nbsp;Belenkas&nbsp;[email protected]&nbsp;Www.belenkas.lt&nbsp;Vilius&nbsp;Munikas&nbsp;Tomo dešros&nbsp;Abraitis&nbsp;[email protected]&nbsp;Www.abraitis.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Tomo dešros&nbsp;Belenkas&nbsp;[email protected]&nbsp;Www.belenkas.lt&nbsp;Tomas&nbsp;Vilemaitis&nbsp;Dino dešros&nbsp;Dešrynas&nbsp;[email protected]&nbsp;Www.derynas.lt&nbsp;Dinas&nbsp;Šukuosena&nbsp;Dino dešros&nbsp;Abraitis&nbsp;[email protected]&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> 
+0

あなたの説明に感謝し、それはとてもうまくいきます! –