2014-01-27 3 views
0

У меня есть массив как это:Добавление другого значения для многомерного массива

$total= [20140124] => Array 
    (
     [abc] => 0.19287878787879 
     [total] => 38 
     [revenue] => 1232 
     [clicks] => 1110 
     [score]=>100 
    ) 

[20140123] => Array 
    (
     [abc] => 0.32898148148148 
     [total] => 28 
     [revenue] => 1142 
     [clicks] => 1022 
     [score]=>200 
    ) 

Теперь я готовлю еще один массив и проверки некоторых условий, как следующее:

foreach($total as $t){ 
    $new_array[] = array(
     "total"=>$t->abc; 
     "another_value"=>$t->revenue/$t->clicks; 
    ); 
    if(some_condition){ 
     $new_array[] = array("total_score"=>$t->clicks+$t->score); 
    } 
} 

Что мне нужно это массив например

$new_array = 

[0] => Array 
     (
      [total] => total_value 
      [another_value] => anopther_value 
      [total_score] => total_score_value 

     ) 

    [1] => Array 
     (
      [total] => total_value 
      [another_value] => anopther_value 
      [total_score] => total_score_value 
     ) 
) 

Но я не получаю total_score, вставленный в 0-й индекс. Вместо этого весь массив заменяется значениями в условии if. Как я могу получить total_score также с другими индексами?

+1

Почему вы используете объектную нотацию ($ t-> abc) на массивах? – hindmost

+0

ha ... это ошибка в любом случае –

ответ

0

попробовать это один:

foreach($total as $t){ 
    $array_element = array(); 
    $array_element["total"] = $t["abc"]; 
    $array_element["another_value"] = $t["revenue"]/$t["clicks"]; 
    ); 
    if(some_condition){ 
     $array_element["total_score"] = $t["clicks"] + $t["score"]; 
    } 
    $new_array[] = $array_element; 
} 

В своем коде вы добавляете элемент в $new_array и затем проверки этого условия. Таким образом, вы добавляете следующий элемент, но не редактирование первого

+0

прохладный. Вот и все. Спасибо человеку –

1

Вы можете попробовать:

foreach($total as $t){ 
    $data = array(
     'total'   => $t['abc'], 
     'another_value' => $t['revenue']/$t['clicks'] 
    ); 

    if(some_condition){ 
     $data['total_score'] = $t['clicks'] + $t['score']; 
    } 
    $new_array[] = $data; 
} 
+0

На самом деле оба ответа одинаковы. Поэтому я принимаю первый. :) Спасибо hsz –

+0

Совсем нет. @ k102 использует '->', которые здесь неверны. Вы зацикливаете массивы, а не объекты, поэтому вам нужно вызвать элементы массива '$ array ['key']'! – hsz

+0

@hsz Я смущен об этом - OP говорит, что он работает – k102

1

Его не будут вставлены в 0-й индекс, потому что вы используете $ new_array [], который создает новый индекс каждого время называется. Вы можете использовать фиксированный индекс, увеличивая счетчик в своем цикле или вызывая его после каждой итерации. Решение вашего встречного решения будет выглядеть следующим образом:

$count = 0;  
foreach($total as $t){ 
    $new_array[$count] = array(
     "total"=>$t->abc; 
     "another_value"=>$t->revenue/$t->clicks; 
    ); 
    if(some_condition){ 
     $new_array[$count] = array("total_score"=>$t->clicks+$t->score); 
    } 
    $count++; 
} 
Смежные вопросы