如何从“pecan”中删除值“288”并返回更新的数组。
这样的数组:
a: 10: {
s: 13: "Fraser Island";
a: 7: {
i: 0;
i: 303;
i: 1;
i: 34;
i: 2;
i: 27;
i: 3;
i: 291;
i: 4;
i: 293;
i: 5;
i: 37;
i: 6;
i: 288;
}
s: 5: "pecan";
a: 5: {
i: 0;
i: 34;
i: 1;
i: 27;
i: 2;
i: 291;
i: 3;
i: 59;
i: 4;
i: 288;
}
s: 11: "New Triper";
a: 3: {
i: 0;
i: 291;
i: 1;
i: 293;
i: 2;
i: 288;
}
}
在PHP中将其翻译为:
Array (
[0] => Array (
[Fraser Island] => Array (
[0] => 303
[1] => 34
[2] => 27
[3] => 291
[4] => 293
[5] => 37
[6] => 288
)
[pecan] => Array (
[0] => 34
[1] => 27
[2] => 291
[3] => 59
[4] => 288
)
[New Triper!] => Array (
[0] => 291
[1] => 293
[2] => 288
)
)
)
通过查找数组列名称和值来从多维数组中删除/删除值。我使用这段代码:
// DELETE VALUE FROM ARRAY
function remove_element_by_value($arr, $val) {
$return = array();
foreach($arr as $k => $v) {
if(is_array($v)) {
$return[$k] = remove_element_by_value($v, $val); //recursion
continue;
}
if($v == $val) continue;
$return[$k] = $v;
}
return $return;
}
但是它会删除所有数组列中的所有匹配值。
答案 0 :(得分:2)
因此,您知道自己正在查看pecan
密钥,并且知道自己正在寻找288
,因此只需搜索以返回密钥并unset()
:
$key = 'pecan';
$val = '288';
unset($array[0][$key][array_search($val, $array[0][$key])]);
重新索引:
$array[0][$key] = array_values($array[0][$key]);
或者解开它:
$found = array_search(288, $array[0]['pecan']);
unset($array[0]['pecan'][$found]);
$array[0]['pecan'] = array_values($array[0]['pecan']);
答案 1 :(得分:1)
尝试remove_element_by_value($arr, '288', 'pecan')
// DELETE VALUE FROM ARRAY
function remove_element_by_value($arr, $val, $keyToSearch) {
$keyOfValue = array_search($val, $arr[0][$keyToSearch]);
unset($arr[0][$keyToSearch][$keyOfValue]);
$arr[0][$keyToSearch] = array_values($arr[0][$keyToSearch]); #Reindex
return $arr;
}
这样,您可以通过为元素提供要删除的键和值来删除元素,例如remove_element_by_value($arr, '288', 'Fraser Island') // remove 288 from Fraser Island
等
// Code for PHPfiddle
function remove_element_by_value($arr, $val, $keyToSearch) {
$keyOfValue = array_search($val, $arr[0][$keyToSearch]);
unset($arr[0][$keyToSearch][$keyOfValue]);
$arr[0][$keyToSearch] = array_values($arr[0][$keyToSearch]);
return $arr;
}
$array = array(array('abc'=>array(1,2,3,4,5,6)));
print_r(remove_element_by_value($array, 2, 'abc'));
答案 2 :(得分:0)
// DELETE VALUE FROM ARRAY
function remove_element_by_value($arr, $key ,$val ) {
$return = array();
foreach($arr as $k => $v) {
if(is_array($v)) {
$return[$k] = remove_element_by_value($v, $val); //recursion
continue;
}
if($v == $val && $k == $key) continue;
$return[$k] = $v;
}
return $return;
}
答案 3 :(得分:0)
此功能将从特定的索引/关联数组中删除元素:
function removeElement($array, $value) {
if(is_array($array)) {
$key = array_search($value,$array);
if(!isset($key)) {
unset($array[$key]);
return $array;
}
}
}
如果值与多维数组匹配,此函数将删除每个元素:
function removeElementMulti($array, $value) {
if(is_array($array)) {
foreach($array as $array_key => $simple_array) {
$key = array_search($value,$simple_array);
if(isset($key)) {
unset($array[$array_key][$key]);
}
}
return $array;
}
}