结合两个数组PHP

时间:2012-07-26 14:37:47

标签: php mysql

我正忙于在应用程序中对菜单结构进行排序。一旦用户重新排序菜单,值(例如;菜单项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的值
  3. 然而,我遇到了一个问题。我希望数组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
      )
    )
    

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为你可以获得你想做的事情:

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

现在$new包含您希望的顺序值