0

我正忙于对我的应用程序中的菜单结构进行排序。用户对菜单重新排序后,值(例如,菜单项 1、菜单项 2 等)仍位于同一位置。

现在我有两个数组,一个保存它们的排序方式(数组 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 的值

但是,我遇到了问题。我希望数组 2 中的值坚持它们的键。因此,假设我将 value_0 的位置更改为最后一个,新数组将如下所示;

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

有没有办法做到这一点,还是我做错了?

编辑

好的,它是多维数组。但是我在创建一个时遇到了问题。

数组 1 和数组 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']);
}

从那时起,我在创建多维数组时遇到了问题;

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
        )

现在我需要获取这些值并用逗号将它们内爆。但是,由于不是每 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
  )
)
4

2 回答 2

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

于 2012-07-26T14:45:27.110 回答
0

我认为你可以获得你想要的东西:

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

现在$new按您想要的顺序包含值

于 2012-07-26T14:41:49.143 回答