【问题标题】:Convert associative array into indexed将关联数组转换为索引
【发布时间】:2011-10-25 11:52:18
【问题描述】:

我已经看到了一些使用 array_values 的示例,但无法完全弄清楚如何让它工作......

我有一个通过 POST 传递的关联数组,我需要将其转换为索引数组...

我的 print_r($_POST) 给了我这个...我需要将所有这些放入索引数组中:)

Array (
    [fieldnames] => 36771X21X198|36771X21X199|36771X21X200|36771X21X201|36771X21X202 
    [36771X21X198] => 3434343
    [display36771X21X198] => on
    [36771X21X199] => 5656565
    [display36771X21X199] => on 
    [36771X21X200] => 89898989 
    [display36771X21X200] => on 
    [36771X21X201] => 90909090 
    [display36771X21X201] => on 
    [36771X21X202] => 12121212 
    [display36771X21X202] => on 
    [move] => movesubmit 
    [move2] => ONLINE Submit 
    [thisstep] => 1 
    [sid] => 36771 
    [token] => 1234567890
) 

【问题讨论】:

  • 如果您展示了您想要实现的目标的示例,提供答案会更容易
  • 另外,术语检查:所有 PHP 数组都是关联的。有一些名称用于索引是连续整数的名称; “数字索引”是一个不错的选择。
  • 做什么用的你需要那个。先生。导演?
  • array_values() 完全符合您的描述。你怎么能不make out how to get it to work?你有什么问题?
  • +1 人。我不明白为什么你想把它变成一个“数字索引”数组。很多数据就在那里丢失了。尝试更好地解释

标签: php


【解决方案1】:

观察这种将$_POST 转换为数字索引数组的神奇方法:

$numerical = array_values($_POST);


但是如果你想保留你的密钥呢?也许你想要这样的东西?

$numerical = array();
$sep = ':';

foreach($_POST as $k=>$v)
{
  $numerical[] = $k.$sep.$v;
}

$numerical 然后会有:

Array
(
    [0] => fieldnames:36771X21X198|36771X21X199|36771X21X200|36771X21X201|36771X21X202
    [1] => 36771X21X198:3434343
    [2] => display36771X21X198:on
    [3] => 36771X21X199:5656565
    [4] => display36771X21X199:on
    [5] => 36771X21X200:89898989
    [6] => display36771X21X200:on
    [7] => 36771X21X201:90909090
    [8] => display36771X21X201:on
    [9] => 36771X21X202:12121212
    [10] => display36771X21X202:on
    [11] => move:movesubmit
    [12] => move2:ONLINE Submit
    [13] => thisstep:1
    [14] => sid:36771
    [15] => token:1234567890
)


或者,对于我的最后一个例子:

$fieldnames_original = explode('|', $_POST['fieldnames']);
$fieldnames_actual = array();
$values = array();

foreach($_POST as $k=>$v)
{
  if($k!='fieldnames')
  {
    $fieldnames_actual[] = $k;
    $values[] = $v;
  }
}

这将设置 3 个数组:

$fieldnames_original:

Array
(
    [0] => 36771X21X198
    [1] => 36771X21X199
    [2] => 36771X21X200
    [3] => 36771X21X201
    [4] => 36771X21X202
)

$fieldnames_actual:

Array
(
    [0] => 36771X21X198
    [1] => display36771X21X198
    [2] => 36771X21X199
    [3] => display36771X21X199
    [4] => 36771X21X200
    [5] => display36771X21X200
    [6] => 36771X21X201
    [7] => display36771X21X201
    [8] => 36771X21X202
    [9] => display36771X21X202
    [10] => move
    [11] => move2
    [12] => thisstep
    [13] => sid
    [14] => token
)

和$值:

Array
(
    [0] => 3434343
    [1] => on
    [2] => 5656565
    [3] => on
    [4] => 89898989
    [5] => on
    [6] => 90909090
    [7] => on
    [8] => 12121212
    [9] => on
    [10] => movesubmit
    [11] => ONLINE Submit
    [12] => 1
    [13] => 36771
    [14] => 1234567890
)

【讨论】:

  • 会不会有这样的工作:$numbered = (array) array_merge($one, $two, $three);
  • 类型转换不适合我,还是我错过了什么?
  • @NabeelKhan 我认为你正在做一些事情。 PHP 将保持关联数组关联,即使类型转换为“数组”。我会调整我的答案。谢谢
【解决方案2】:

功能

function array_default_key($array) {
   $arrayTemp = array();
    $i = 0;
    foreach ($array as $key => $val) {
         $arrayTemp[$i] = $val;
          $i++;
     }
      return $arrayTemp;
}

将关联数组作为参数传递,它将转换为数组的默认索引。例如:我们有Array('2014-04-30'=>43,'2014-04-29'=>41),在调用函数后数组将是Array(0=>43,1=>41)

【讨论】:

  • 您能否提供您的代码如何解决问题的描述或简要说明?
  • 只需将关联数组作为参数传递,它就会转换为数组的默认索引。例如:我们有 Array('2014-04-30'=>43,'2014-04-29'=>41) 调用函数后数组将是 Array(0=>43,1=>41)
【解决方案3】:

在一个小数组上测试了与索引转换器的递归关联。

function assoc2indexedMulti($arr) {

    // initialize destination indexed array
    $indArr = array();

    // loop through source
    foreach($arr as $val) {

        // if the element is array call the recursion
        if(is_array($val)) {

            $indArr[] = assoc2indexedMulti($val);

        // else add the value to destination array
        } else {

            $indArr[] = $val;
        }
    }

    return $indArr;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多