你将如何转换这个数组:
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
)
答案 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 );