2013-03-29 11 views
0

У меня есть несколько вопросов. Получил этот массив:Вычитание массивов более эффективно

$array_1 = array(
    "1" => "4", 
    "2" => "8", 
    "3" => "12", 
    "4" => "16", 
    "5" => "20", 
    "6" => "24", 
    "7" => "28", 
    "8" => "32", 
    "9" => "36", 
    "10" => "40", 
    "11" => "44", 
    "12" => "48", 
    "13" => "52", 
    "14" => "56", 
    "15" => "60", 
    "16" => "64", 
    "17" => "68", 
    "18" => "72", 
    "19" => "76", 
    "20" => "80", 
    "21" => "84", 
    "22" => "88", 
    "23" => "92", 
    "24" => "96", 
    "25" => "100", 
    "26" => "104", 
    "27" => "108", 
    "28" => "112", 
    "29" => "116", 
    "20" => "120", 
    "31" => "124", 
    "32" => "128", 
    "33" => "132", 
    "34" => "136", 
    "35" => "140", 
    "36" => "144", 
    "37" => "148", 
    "38" => "152", 
    "39" => "156", 
    "40" => "160", 
    "41" => "164", 
    "42" => "168", 
    "43" => "172", 
    "44" => "176", 
    "45" => "180", 
    "46" => "184", 
    "47" => "188", 
    "48" => "192", 
    "49" => "196", 
    "50" => "200" 
); 

Я хотел бы вычесть $array_1 по 1,2,3,4 на несколько массивов. До сих пор я делал это, имея другие массивы:

$array_2 = array(
    "1" => "1", 
    "2" => "1", 
    ... 
    "49" => "1", 
    "50" => "1" 
); 

$array_3 = array(
    "1" => "2", 
    "2" => "2", 
    ... 
    "49" => "2", 
    "50" => "2" 
); 
// All the way to values of 4 

Тогда с этим я хотел бы сделать array_diff, чтобы получить сниженную стоимость.

Мне было интересно, во-первых, есть лучший способ (более эффективный), чтобы вычесть массив, а не повторять 1,2,3,4 50 раз каждый.

Во-вторых, существует ли более эффективный способ иметь $array_1 значения от 4 до 200?

В-третьих, мне нужен массив для вычитания из $array_1, чтобы снизить значение? Есть ли лучший способ это как: $array_1 - 1

КАЧЕСТВЕ ВЫВОД

// $array_1 - $array_2 (value of 1) 
$minus_one = array(
    "1" => "3", 
    "2" => "7", 
    "3" => "11", 
    ... 
); 
// $array_1 - $array_3 (value of 2) 
$minus_two = array(
    "1" => "2", 
    "2" => "6", 
    "3" => "10", 
    ... 
); 
// $array_1 - $array_4 (value of 3) 
$minus_one = array(
    "1" => "1", 
    "2" => "4", 
    "3" => "8", 
    ... 
); 
+1

Невозможно понять exectly, можете ли вы показать мне, какой результат вы хотите? – rohitarora

+0

@rohitarora добавил:] – Ahhhhhhhhhhhhhdfgbv

ответ

3

Хотя решение xdazz является правильным. Вы также можете сгенерировать конечный предполагаемый массив на

$array_1 = array_fill(1, 50, null); 
array_walk($array_1, function(&$item, $key){ 
    $item = $key * 4; 
}); 

$minus_one = $minus_two = $minus_three = array(); 
foreach($array_1 as $key => $value) 
{ 
    $minus_one[$key] = $value - 1 ; 
    $minus_two[$key] = $value - 2 ; 
    $minus_three[$key] = $value - 3 ; 
} 
+0

Это хорошо работает! Мне было интересно, как бы узнать, было ли значение в одном из ключей $? '$ c = 4; if ($ c == $ minus_one) {...} 'где' $ c' не является массивом. – Ahhhhhhhhhhhhhdfgbv

+0

Вы можете использовать 'array_key_exists ($ value, $ minus_one)' –

+0

Не знал об этом! Приветствия:] – Ahhhhhhhhhhhhhdfgbv

2

Вы можете построить свой массив, как показано ниже:

$array_1 = array_fill(1, 50, null); 
array_walk($array_1, function(&$item, $key){ 
    $item = $key * 4; 
}); 
var_dump($array_1); 

Для $array_2 и $array_3, просто использовать array_fill достаточно :

$array_2 = array_fill(1, 50, 1); 
$array_3 = array_fill(1, 50, 2); 
+0

Отметьте это как правильное, но kuldeep.kamboj kinda пригвоздил его. – Ahhhhhhhhhhhhhdfgbv

Смежные вопросы