让我的阵列漂亮

时间:2014-05-28 14:45:12

标签: php arrays

我有一个像这样结构的数组

  • foo =我们不关心这个例子的东西
  • foo1_value
  • foo1_label
  • foo1_unit
  • foo2_value
  • foo3_label
  • foo3_value

你能想出一个快速的方法让它看起来像那样吗?

  • FOO
  • foo1
    • 标签
    • 单元
  • foo2的
  • foo3
    • 标签

我实际上正在尝试这样的事情:

array_walk($array, function($val, $key) use(&$nice_array) {
        $match = false;
        preg_match("/_label|_value|_unit|_libelle/", $key, $match);
        if (count($match)) {
            list($name, $subName) = explode('_', $key);
            $nice_array[$name][$subName] = $val;
        } else {
            $nice_array[$key] = $val;
        }
    });


    echo '<pre>';
    print_r($nice_array);
    echo '</pre>';

这是有效的我只需要反思foo_foo_label的事情,这一切都很好

3 个答案:

答案 0 :(得分:4)

您可以在数组键上使用explode,如下所示:

$newArray = array();
foreach ( $array as $key => $value )
{
    $parts = explode('_', $key);
    $newArray[$parts[0]][$parts[1]] = $value; 
}

修改更新,详见评论。将处理您的foo_foo_value案例以及foofoo_foo。如果您只将结果传递给第二个数组,那么确实没有理由使用array_walk。

$newArray = array();
foreach ( $array as $key => $value ) {
  if ( preg_match('/_(label|value|unit)$/', $key) === 0 ) {
    $newArray[$key] = $value;
    continue;
  }
  $pos = strrpos($key, '_');
  $newArray[substr($key, 0, $pos)][substr($key, $pos+1, strlen($key))] = $value;
}

答案 1 :(得分:0)

您可以做的是遍历数组,并在explode()上拆分(_)每个键以构建新数组。

$newArray = array();
foreach($oldArray as $key=>$value){
    list($name, $subName) = explode('_', $key);

    if($subName !== NULL){
        if(!isset($newArray[$name])){
            $newArray[$name] = array();
        }
        $newArray[$name][$subName] = $value;
    }
    else{
        $newArray[$name] = $value;
    }
}

答案 2 :(得分:0)

    $nice_array = array();
    array_walk($array, function($val, $key) use(&$nice_array) {
        $match = false;
        preg_match("/_label|_value|_unit|_libelle/", $key, $match);
        if (count($match)) {
            $tname = preg_split("/_label$|_value$|_unit$|_libelle$/",$key);
            $name = $tname[0];
            $subName = substr($match[0],1);
            $nice_array[$name][$subName] = $val;
        } else {
            $nice_array[$key] = $val;
        }
    });