2016-11-16 3 views
1

게시 양식의 배열을 가지고 있으며 입력이 배열로 바뀌고 적어도 하나의 요소가 있습니다. 그것은 다음과 같이 :PHP 동적 배열에서 elemets 결합/병합

array (size=9) 
    'sunSale' => int 0 
    'monSale' => string '1' (length=1) 
    'tueSale' => string '1' (length=1) 
    'wedSale' => int 0 
    'thuSale' => int 0 
    'friSale' => int 0 
    'satSale' => string '1' (length=1) 

및 배열에 따라 :

$weekName = array(
    'sunSale' => '星期日', 
    'monSale' => '星期一', 
    'tueSale' => '星期二', 
    'wedSale' => '星期三', 
    'thuSale' => '星期四', 
    'friSale' => '星期五', 
    'satSale' => '星期六', 
); 

그것은 weeks 유지됩니다

내가 하나에 요소를 병합 할
'saleTimes' => 
array 
    0 => 
    array (size=9) 
     'sunSale' => int 0 
     'monSale' => string '1' (length=1) 
     'tueSale' => int 0 
     'wedSale' => int 0 
     'thuSale' => int 0 
     'friSale' => int 0 
     'satSale' => int 0 
     'startSaleTime' => string '09:00' (length=5) 
     'endSaleTime' => string '15:00' (length=5) 
    1 => 
    array (size=9) 
     'sunSale' => int 0 
     'monSale' => int 0 
     'tueSale' => string '1' (length=1) 
     'wedSale' => int 0 
     'thuSale' => int 0 
     'friSale' => int 0 
     'satSale' => int 0 
     'startSaleTime' => string '05:19' (length=5) 
     'endSaleTime' => string '08:00' (length=5) 
    2 => 
    array (size=9) 
     'sunSale' => int 0 
     'monSale' => int 0 
     'tueSale' => string '1' (length=1) 
     'wedSale' => int 0 
     'thuSale' => int 0 
     'friSale' => int 0 
     'satSale' => string '1' (length=1) 
     'startSaleTime' => string '05:19' (length=5) 
     'endSaleTime' => string '08:00' (length=5) 
    ..... 

결과이 될 것입니다 값이 string '1'이고 인덱스가 startSaleTime 인 경우 endSaleTime은 사용하지 않으므로 배열로 유지하거나 제거하십시오 d oes는 결과에 영향을 미치지 않습니다.

나는이

for($i = 0; $i < count($weekName); $i++) { 
     array_merge($paramList['saleTimes'][$i], (int)$paramList['saleTimes'][$i+1]); 
    } 

하지만 오류 Argument #1 is not an array, 을 얻을 것이다 어떻게 값을 1로 모든 weeks 인덱스를 얻을 수있는 시도?

답변

1

루프가 없어도 각 단일 하위 배열을 인수로 array_merge()으로 간단히 전달할 수 있습니다. 그러나 array_merge()의 경우 나중에 배열의 값이 이전 배열의 값보다 우선하므로 가장 중요한 데이터 배열이 마지막에 오는 것이 중요합니다. 아래의 코드는이 포인트를 보여줍니다. Quick-Test Here :

지정된 ARRAY :

<?php 
    $arr  = array(
     array(
      'sunSale' => 0, 
      'monSale' => '1', 
      'tueSale' => 0, 
      'wedSale' => 0, 
      'thuSale' => 0, 
      'friSale' => 0, 
      'satSale' => 0, 
      'startSaleTime' => '09:00', 
      'endSaleTime' => '15:00', 
     ), 
     array (
      'sunSale' => 0, 
      'monSale' => 0, 
      'tueSale' => '1', 
      'wedSale' => 0, 
      'thuSale' => 0, 
      'friSale' => 0, 
      'satSale' => 0, 
      'startSaleTime' => '05:19', 
      'endSaleTime' => '08:00', 
     ), 
     array (
      'sunSale' => 0, 
      'monSale' => 0, 
      'tueSale' => '1', 
      'wedSale' => 0, 
      'thuSale' => 0, 
      'friSale' => 0, 
      'satSale' => '1', 
      'startSaleTime' => '05:19', 
      'endSaleTime' => '08:00', 
     ), 
    ); 

병합 :

<?php 
    $arrMerged = array_merge($arr[0], $arr[1], $arr[2]); 

    var_dump($arrMerged); 

덤프 RESULT :

// var_dump($arrMerged) ABOVE YIELDS::  
    array (size=9) 
     'sunSale' => int 0 
     'monSale' => int 0 
     'tueSale' => string '1' (length=1) 
     'wedSale' => int 0 
     'thuSale' => int 0 
     'friSale' => int 0 
     'satSale' => string '1' (length=1) 
     'startSaleTime' => string '05:19' (length=5) 
     'endSaleTime' => string '08:00' (length=5) 

업데이트 : 루프 사용 (수동 병합). (QUICK-TEST HERE.)

<?php 

    $merged  = $arr[0]; 

    foreach($arr as $item){ 
     foreach($item as $key=>$val){ 
      $merged[$key] = ($merged[$key] == "" || !$merged[$key])?$val : $merged[$key]; 
     } 
    } 
    // REMOVE THE `startSaleTime` AND `endSaleTime` KEYS 
    unset($merged['startSaleTime']); 
    unset($merged['endSaleTime']); 

    var_dump($merged); 
    // YIELDS:: 
    array (size=7) 
     'sunSale' => int 0 
     'monSale' => string '1' (length=1) 
     'tueSale' => string '1' (length=1) 
     'wedSale' => int 0 
     'thuSale' => int 0 
     'friSale' => int 0 
     'satSale' => string '1' (length=1) 
+0

하지만 한두 것이다 .. array_merge '처럼 배열 요소를 제어 캔트 ($의 도착 [0])'또는'array_merge ($의 도착 [0], $의 도착 [1] .... $ arr [4])'는 게시물에 따라 다릅니다. 그래서 배열을 먼저 계산해야합니까? –

+1

@DoranWu 그런 다음 루프를 사용하여 수동으로 병합 할 수 있습니다. 게시물은 해당 접근법을 반영하도록 업데이트되었습니다. https://eval.in/678479 – Poiz

+0

THX! @Poiz 그것은 내가 원하는 것입니다 :) –