我想创建一个接受路径参数的函数,并返回多维数组的适当成员。让我们说我们这样做:
$myContactsBook = [
'relatives' => [
'bob',
'john',
],
'friends' => [
'work' => [
'andrew',
'eric',
],
'mars' => [
'zoopzap'
],
],
];
我希望能够做几件事:
答案 0 :(得分:1)
我花了更多的时间,而不是我应该抓住我的愚蠢头,所以我虽然分享它,以防有人可能遇到类似的问题。我会非常具有描述性,所以像我这样的初学者能够理解一切。我想。
首先,让我们就地址格式达成一致:
readContact('path/to/target')
这是最简单的使用,但如果我们的数组键中包含正斜杠,则可能会出现问题;它也无法区分数字索引和数字字符串。
readContacts(['path', 'to', 'target'])
这是万无一失的,但有点丑陋。
如果你确定你的密钥是什么样的,你可以使用字符串地址并用/
分隔符或你选择的任何一个分隔它。你最终会得到一个数组,所以我假设我们为了这个例子而使用数组参数:
function unsetContacts(array $address) {
$lookup =& $myContactsBook;
$lastKey = array_pop($address);
foreach ($address as $key) {
$lookup =& $lookup[$key];
}
// if you want to also return the value and make this getAndUnsetContacts();
// $return = $lookup[$last_bit];
unset($lookup[$last_bit]);
// return $return;
}
如您所见,如果我们只想读取数组值,我们可以这样做:
function readContacts(array $address) {
$lookup = $myContactsBook;
foreach ($address as $key) {
$lookup = $lookup[$key];
}
return $lookup;
}
如果您想编辑值,这不会起作用,因为如果我们现在为$lookup
分配了一个新值,它只会更改该变量,而不会更改源数组({{1} })。通过引用使用PHP分配很容易避免;
$myContactsBook
但是,像这样我们仍然无法取消数组成员的设置。如果我们现在在$ lookup上使用function editContacts(array $address, $newValue) {
$lookup =& $myContactsBook;
foreach ($address as $key) {
$lookup =& $lookup[$key];
}
$lookup = $newValue;
return;
}
构造,它将取消设置引用,但$ myContactsBook将保持不变。我们可以执行unset()
之类的操作,但不会删除数组键。根据您的需要,这可能还不够。
我们需要的是$lookup = null
。我们可以通过这样做尽可能接近:
unset($myContactsBook['path']['to']['target']);
这基本上是代码的第一个片段。如果有更好的解决方案或有些不明确的地方,请告诉我。
也就是说,如果有人在一开始就需要帮助那么简单。