php中的数组转换

时间:2009-11-09 09:53:04

标签: php arrays cakephp

你将如何转换这个数组:

Array
(
    [0] => Array
        (
            [Contact] => Array
                (
                    [number] => 0425 234 634
                )

        )

    [1] => Array
        (
            [Contact] => Array
                (
                    [number] => 2939 492 235
                )

        )

)

进入这个数组

Array
(
    [0] => 0425 234 634
    [1] => 2939 492 235
)

7 个答案:

答案 0 :(得分:7)

参见Set::extract()它使用xpath表示法从数组中的路径中提取节点值。

$ numbers = Set :: extract('/ Contact / number',$ numbers);

在一行中实现所有这一切的代码远比其他建议的代码更容易理解。

答案 1 :(得分:4)

一种非常脏的方法,不要认为有一种功能可以为你做这件事。

foreach($array1 as $key => $value) {
    $array2[$key]=$value['contact']['number'];
}

编辑:

实际上,array_values可能会有所帮助,值得针对您的多维数组进行测试。

答案 2 :(得分:4)

由于您使用的是CakePHP,因此包含的utility library可以满足您的需求。

$a = array(
    0 => array(
        'Contact' => array(
                'number' => "0425 234 634"
        )
    ),
    1 => array(
        'Contact' => array(
                'number' => "2939 492 235"
        )
    )
);

$b = Set::classicExtract($a, '{n}.Contact.number');

print_r($b);

结果是:

Array
(
    [0] => 0425 234 634
    [1] => 2939 492 235
)

答案 3 :(得分:2)

我只看到使用单独数组存储结果的解决方案,这样可以正常工作:

<?php
    foreach($numbers as $key => $number) {
        $numbers[$key] = $number['Contact']['number'];
    }
?>

答案 4 :(得分:1)

在这里,您可以完全正常运行并且不需要对原始阵列进行任何假设:)

<?php
$array = array(
    0 => array(
        'Contact' => array(
            'number' => 123123123
        )
    ),
    1 => array(
        'Contact' => array(
            'number' => 123123123
        )
    ),
    2 => array(
        'Contact' => array(
            'number' => 123123123
        )
    ),
);


function flattenArray(array $arr, &$newArr) {
    while($array = array_shift($arr)) {
        if(is_array($array)) {
            flattenArray($array, $newArr);
        } else {
            $newArr[] = $array;
        }
    }
}

$newArr = array();

foreach($array as $key => $value) {
    flattenArray($value, $newArr);
}

答案 5 :(得分:1)

class DeepCollect {
  protected $arr = array();

  public function collect($item, $key) {
    $this->arr[] = $item;
  }

  public static function collect_all($array) {
    $collect = new self;
    array_walk_recursive($array, array($collect, "collect"));
    return $collect->arr;
  }
}

print_r(DeepCollect::collect_all($input_array));

无论组合键如何,都适用于任何嵌套数组。

答案 6 :(得分:1)

这也适用于

Set:extract( "{n}.Contact.number", $a );
Set::extract( "/number", $a );