我正忙于在应用程序中对菜单结构进行排序。一旦用户重新排序菜单,值(例如;菜单项1,菜单项2等)仍然在同一位置。
现在我有两个数组,一个保存它们的排序方式(数组1),另一个保存菜单项的值。 (数组2)
两个阵列的示例; (数组1,用于保存键)
Array
(
[0] => 1
[1] => 2
[2] => 0
)
以上数组的值是新数组的键。
(数组2,保存值)
Array
(
[0] => value_0
[1] => value_1
[2] => value_2
)
所以我认为最好创建一个由;
组成的新数组然而,我遇到了一个问题。我希望数组2中的值坚持他们的键。所以我要说我将value_0的位置更改为最后一个,新数组看起来像这样;
Array
(
[1] => value_1
[2] => value_2
[0] => value_0
)
有没有办法实现这一点,还是我完全错了?
修改
好的,这是多维数组。但是我在创建一个时遇到了问题。
数组1和数组2都来自数据库。具有排序顺序的数组1和数组2包含值。现在,数组2中的值存储如下;值1,值2,值3。因此,为了能够与他们一起工作,我会爆炸,(逗号)。
获取的结果都不同;
所以对于我做的第一个数组;
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
)
)
答案 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
包含您希望的顺序值