我想从一个数组中删除一些键(不按顺序)并从中创建一个新数组。
我是使用array_shift()
函数完成的,但是需要跳过下一个键然后再次执行array_shift。
我如何从逻辑上解决这个问题?
我的数组
Array
(
[api] => Array
(
[0] => system
[1] => assets
[2] => theme
[3] => resources
[4] => api
[5] => xml
[6] => json
[7] => jsonp
[8] => request
)
[class] => Array
(
[name] => authentication
[abbr] => auth
)
[directories] => Array
(
[application] => application
[mvc] => Array
(
[model] => model
[view] => view
[controller] => controller
)
[assets] => Array
(
[folder] => assets
[css] => css
[img] => img
[js] => js
)
[config] => config
)
[smarty] => Array
(
[security] => on
[delimiter] => Array
(
[left] => {!
[right] => !}
)
[template] => Array
(
[header] => header
[footer] => footer
[extension] => tpl
)
)
[version] => Array
(
[component] => Array
(
[0] => Array
(
[name] => CMS
[version] => 1.0
)
[1] => Array
(
[name] => TinyMCE jQuery Package
[version] => 3.5
)
[2] => Array
(
[name] => jQuery
[version] => 1.7.2
)
)
)
)
我需要从键中创建一个新数组:api
,class
,version
答案 0 :(得分:1)
如果只是你需要的那3个键:
$newArray = array(
"api" => $oldArray["api"],
"class" => $oldArray["class"],
"version" => $oldArray["version"]
);
答案 1 :(得分:1)
创建一个明确的键列表,您希望从一个数组移动到另一个数组。循环遍历该列表,从一个列表中拉出并添加到另一个列表。然后从原始数组中删除旧副本:
// Original Array, and empty Array
$array = array( 'api' => 1, 'class' => 2, 'fizz' => 3, 'buzz' => 4 );
$newAr = array();
// For each key we'd like to keep
foreach ( array( 'api', 'class' ) as $key ) {
// (Re)move the value from the original array to our new array
$newAr[$key] = $array[$key]; unset( $array[$key] );
}
// Show the contents of the new array
print_r( $newAr );
立即在线试用:http://codepad.org/7iYG4iVB
答案 2 :(得分:0)
array_slice()可以让你切片'出一个数组的一部分。该部分可以是单个元素,也可以是一系列元素。基本上,切片功能可以让你破解数组,就像substr()让你破解一个字符串一样。
答案 3 :(得分:0)
$keys = array(1, 5, 'foo');
$new = array();
foreach ($keys as $key) {
$new[$key] = $old[$key];
// or maybe just $new[] = $old[$key];
unset($old[$key]);
}
有更短的方法可以做到这一点,但我认为你可以理解它是如何工作的。
编辑 - 这是一个更短的方式
$keys = array(1, 5);
$new = array_intersect_key($old, array_flip($keys)));
$old = array_diff_key($old, array_flip($keys)));
答案 4 :(得分:0)
这似乎太简单了:
$new_array = array(
'api' => $old_array['api'],
'class' => $old_array['class'],
'version' => $old_array['version']
);
然后执行var_dump( $new_array);
查看它是否包含所需的输出。