Php 通过将键从现有阵列剪切到新阵列来创建新阵列
我想取一个数组并从中剪切一些键(不是按顺序),然后从中创建一个新数组 我使用了Php 通过将键从现有阵列剪切到新阵列来创建新阵列,php,Php,我想取一个数组并从中剪切一些键(不是按顺序),然后从中创建一个新数组 我使用了array\u shift()函数,但到了需要跳过下一个键,然后再次执行array\u shift的时候 我怎样才能合乎逻辑地解决这个问题 我的阵列 Array ( [api] => Array ( [0] => system [1] => assets [2] => theme
array\u shift()
函数,但到了需要跳过下一个键,然后再次执行array\u 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
,有一个可以“切片”数组的一部分。该部分可以是单个元素,也可以是一系列元素。基本上,slice函数允许对数组进行hack'n chop,就像substr()允许对字符串进行hack'n chop一样
$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)));
如果您只需要这3把钥匙:
$newArray = array(
"api" => $oldArray["api"],
"class" => $oldArray["class"],
"version" => $oldArray["version"]
);
这似乎太简单了:
$new_array = array(
'api' => $old_array['api'],
'class' => $old_array['class'],
'version' => $old_array['version']
);
然后执行
var\u转储($new\u数组)
查看它是否包含所需的输出。创建要从一个数组移动到另一个数组的键的显式列表。循环浏览该列表,从一个列表中提取并添加到另一个列表中。然后从原始阵列中删除旧副本:
// 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 );
现在在线试试:你能给我们举个例子吗。是否有一个可定义的标准来确定您正在使用哪些元素,以及您将离开哪些元素?发布一些具体的示例/代码部分,这将帮助我们提供一个有意义的解决方案。您希望从提到的阵列中复制什么?但我需要从现有阵列中剪切出
$oldArray
将是您现有的阵列$newArray
将只包含这3个键和旧数组的内容。我不知道是谁投了反对票,也不支持他们的投票,但他们投了正确的答案。所以请投赞成票。显然,这个答案比在数组上循环要好,因为它在恒定时间内运行,而不是O(n)。我没有否决,但是这个解决方案将值保留在原始数组中。如果我没弄错的话,OP希望将它们从原始数组中删除。您可以在以后随时用新数组覆盖原始数组。。。(我知道你可能知道,只是说)似乎接近我想要的,我只是不理解如何使用阵列拼接的逻辑