我有不同的多维数组,其中包含不同的键和值:
$array_1 = array('cars' => array('audi' => array('a3' => array('one', 'two', 'three'), 'a5' => array('five', 'six', 'seven')), 'mercedes' => array('type_1' => array('submodel' => array('whatever'))), 'other_cat' => array('different_things')));
然后我想取消设置一个特定的密钥,例如:
unset($array_1['cars']['audi']['a5']);
现在我喜欢“拆分”,以获得关键变量。
$to_unset = ['cars']['audi']['a5'];
如何取消设置该特定(变量!)键?
亚伦
答案 0 :(得分:1)
一个简单的实用工具,可以避免意外删除不存在的数组键:
function removeArrayKey($path, &$array ) {
$array_temp = &$array;
$previousItem = null;
$path_bits = explode( ".", $path );
foreach( $path_bits as &$path_bit ) {
if( !isset( $array_temp[ $path_bit ] ) ) {
die("Error" . $path_bit);
//throw new Exception( "Path does not exist in array" );
}
$previousItem = &$array_temp;
$array_temp = &$array_temp[ $path_bit ];
}
if( isset( $previousItem ) ) {
unset( $previousItem[ $path_bit ] );
}
return $array;
}
要使用此功能,只需使用removeArrayKey( "cars.mercedes.cars", $array_1 );
并将每个数组索引与.
答案 1 :(得分:0)
因此,当我看到您的问题时,您希望将数组路径保存到变量中。您可以通过两种不同的方式解决此问题:
我会这样做,如果我的数组结构看起来总是一样的(例如[cars] [type] [model])。您可以将要删除的密钥保存到变量中:
$cars = 'cars';
$type = 'audi';
$model = 'a5';
unset($array_1[$cars][$type][$model]);
这将在for(每个)循环中表现出色。
此方法可以解决您的问题,但这不是最佳选择。您可以将所有要设置的键保存到数组中。这种方式可能会导致许多错误,如果这种方式是您的解决方案,您应该重新考虑数组结构。
// arrays start at 0
$to_unset = [
0 => 'cars',
1 => 'audi',
2 => 'a5',
];
unset($array_1[$to_unset[0]][$to_unset[1]][$to_unset[2]]);
此处另一个可能的选项是命名$ to_unset数组的键。
// arrays start at 0
$to_unset = [
'cars' => 'cars',
'type' => 'audi',
'model' => 'a5',
];
unset($array_1[$to_unset['cars']][$to_unset['type']][$to_unset['model']]);
答案 2 :(得分:0)
您可以使用eval,但不推荐。
for ((i=0 ; i<${#arraytest[*]} ; i++))
do
echo ${arraytest[${i}]} | sed "s/$/|${string}/"
done