2012-07-26 115 views
0

我忙於排序我的應用程序中的菜單結構。一旦菜單被用戶重新排序,值(例如:菜單項1,菜單項2等)仍然在相同的地方。結合兩個數組PHP

現在我有兩個數組,一個保存它們的排序方式(數組1),另一個保存菜單項的值。 (陣列2)

兩個陣列的例子; (陣列1中,保持鍵)

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

上述陣列的值是新的數組的鍵。

(陣列2,保持該值)

Array 
(
    [0] => value_0 
    [1] => value_1 
    [2] => value_2 
) 

因此,我認爲這將是最好創建一個新的數組,其由選自;

  1. 的陣列1的值的數組2

的值。然而,我運行到的問題。我想讓數組2中的值堅持他們的鍵。所以我們可以說我改變了value_0的位置到最後一個,新的數組看起來像這樣;

Array 
(
    [1] => value_1 
    [2] => value_2 
    [0] => value_0 
) 

有沒有辦法做到這一點或我是否完全錯誤?

編輯

好了,所以期多維陣列它是。但是,我有問題創建一個。

Array 1和Array 2都來自數據庫。具有排序順序的數組1和數組2包含這些值。現在,數組2中的值就像這樣存儲;值1,值2,值3。所以爲了能夠與他們合作,我爆炸了(逗號)。

提取結果是不同的;

  • 對於第一個數組,它會返回多少個值。 (所以如果有3個值,它將返回3個不同的位置。)
  • 對於第二個數組,它將返回18條記錄,因爲這與其他菜單項(子菜單等)有關。

因此,對於第一個數組我做;

while ($row = mysql_fetch_assoc($result_query_test)) { 
     $positions[] = $row['position']; 
    } 

對於我做的第二個數組;

while ($row = mysql_fetch_assoc($result_values)) { 
     $array_values = explode(',', $row['values']); 
} 

從那時起,我在創建multidimensinonal數組時遇到了問題;

while ($row = mysql_fetch_assoc($result_values)) { 
    $array_values = explode(',', $row['values']); 
    foreach ($positions as $new_key) { 
     foreach ($array_values as $value) { 
       $new_array[] = array('key' => $new_key, 'value' => $value); 
     } 
    } 
} 

編輯二:

這是我現在用的;

(因爲$ all_values是一個多維數組,因爲我有事先的值發生爆炸。)

foreach ($all_values as $values) { 
     foreach ($values as $key => $value) { 
      $new_array[] = array('key' => $positions[$key], 'value' => $value); 
     } 
    } 

這就是$ new_array的回報;

Array 
(
    [0] => Array 
     (
      [key] => 0 
      [value] => value_0 
     ) 

    [1] => Array 
     (
      [key] => 2 
      [value] => value_2 
     ) 

    [2] => Array 
     (
      [key] => 1 
      [value] => value_1 
     ) 

    [3] => Array 
     (
      [key] => 0 
      [value] => value_0 
     ) 

    [4] => Array 
     (
      [key] => 2 
      [value] => value_2 
     ) 

    [5] => Array 
     (
      [key] => 1 
      [value] => value_1 
     ) 

現在我需要得到的值和implode他們用逗號。但是,由於不是每3個值(value_0,value_1,value_3)在一起,我現在不能這樣做。

在這個例子中有3個按鍵,(0,1,2),這應該是它們的值不同的陣列,就像你在你的例子一樣:

Array (
    [0] = Array (
    [key] = 1, 
    [value] = value_1 
), 
    [1] = Array (
    [key] = 2, 
    [value] = value_2 
), 
    [2] = Array (
    [key] = 0, 
    [value] = value_0 
) 
) 
+0

如果我理解正確這你想要一個嵌套的列表? – 2012-07-26 14:41:18

+0

考慮一個二維數組? http://webcheatsheet.com/php/multidimensional_arrays.php – Don 2012-07-26 14:42:42

+0

或者沒有數組...:P通過使用[left]和[right] – 2012-07-26 14:43:31

回答

0

我認爲你可以得到什麼你想這樣做:

$new = array(); 
for($i = 0, $len = count($array1), $i < $len, ++$i) { 
    $new[$array1[$i]] = $array2[$i]; 
} 

現在$new包含在訂單中值,您希望他們

+0

你的方法沒有給我正確的鍵和相應的值。 – Kvarbyte 2012-07-26 19:14:22

+0

是的,我看你是對的:考慮'$ array1 = array(1,2,0)'和'$ array2 = array('value_0','value_1','value_2')'這個腳本產生'$ new = array(1 =>'value_0',2 =>'value_1',0 =>'value_2')'...抱歉,錯誤的建議,我認爲你最適合使用多維數組。 – 2012-07-27 06:50:19

3

何不做一個多維數組?

$arrayThree = 
Array (
    [0] = Array (
    [key] = 1, 
    [value] = value_1 
), 
    [1] = Array (
    [key] = 2, 
    [value] = value_2 
), 
    [2] = Array (
    [key] = 0, 
    [value] = value_0 
) 
) 

無論他們在什麼順序,關鍵和價值永遠是集合。

foreach ($arrayThree as $tempArray) 
{ 
echo $tempArray['key']; 
echo $tempArray['value']; 
} 

創建陣列

$arrayOne = array(); 
$arrayTwo = array(); 
$arrayThree = array(); 

$query = 'SELECT key FROM table1 '; 
$result = mysql_query($query) or die(mysql_error()); 

while($data = mysql_fetch_assoc($result)) 
{ 
    $arrayOne[] = $data['key']; 
} 

$query = 'SELECT value FROM table2 '; 
$result = mysql_query($query) or die(mysql_error()); 

while($data = mysql_fetch_assoc($result)) 
{ 
    $arrayTwo[] = $data['value']; 
} 

foreach($arrayOne as $key => $value) 
{ 
    $arrayThree[] = array('key' => $value, 'value' => $arrayTwo[$key]); 
} 

您可以隨時使用和mysqli或PDO的版本,如果你使用它們。

示例數據

//THESE MIMIC YOUR SELECT RESULTS 
$test_keys = array(1,2,3); 
$test_values = array('value_1', 'value_2', 'value_3'); 

    //DEFAULTS 
$arrayOne = array(); 
$arrayTwo = array(); 
$arrayThree = array(); 

    //WHILE FIRST SELECT 
for($i=0;$i<count($test_keys);$i++) 
{ 
    $arrayOne[] = $test_keys[$i]; 
} 

    //WHILE SECOND SELECT 
for($i=0;$i<count($test_values);$i++) 
{ 
    $arrayTwo[] = $test_values[$i]; 
} 

    //MAKE THE FINAL ARRAY 
foreach($arrayOne as $key => $value) 
{ 
    $arrayThree[] = array('key' => $value, 'value' => $arrayTwo[$key]); 
} 

    //CHECK THE OUTPUT FOR THE NEW ARRAY 
echo '<pre>'.print_r($arrayThree,true).'</pre>'; 

示例輸出

Array 
(
    [0] => Array 
     (
      [key] => 1 
      [value] => value_1 
     ) 

    [1] => Array 
     (
      [key] => 2 
      [value] => value_2 
     ) 

    [2] => Array 
     (
      [key] => 3 
      [value] => value_3 
     ) 

) 

內爆列表

$implodeValues = array_map(function($item) { return $item['value']; }, $arrayThree); 
$implodeVariable = implode(',', $implodeValues); 

echo $implodeVariable; 

破滅輸出

value_1,value_2,value_3

+0

謝謝你的例子。我有創建多維數組時遇到問題。這兩個數組(數組1和數組2)都來自數據庫。具有排序順序的數組1可以正常工作,但Array 2是來自爆炸函數的數組。 (這是因爲這些值在數據庫中是這樣存儲的; value1,value2,value3等) 我將編輯我的帖子以顯示發生了什麼。 – Kvarbyte 2012-07-26 16:44:16

+0

我在答案的底部添加了一個簡單的選擇部分。如果你從多個表中獲得它們,請告訴我。 – Biotox 2012-07-26 18:09:59

+0

我正在使用多個表。這些值是這樣存儲的(在數據庫中);值1,值2,值3,等等。所以我需要將它們爆炸,(逗號)。 現在我知道的一件事是值的數量,所以如果我留在我的例子中,value1,value2,value3是3.哪一個總是與排序順序相同。如果那有意義的話。這基本上是我堅持。 – Kvarbyte 2012-07-26 18:20:32