Nasıl diziler ancak php az hatlarında hiçbir sayısal tuşları birleştirmek için?

5 Cevap php
$result = array_merge($arr1,$arr2);

I $arr2, bunun için bir seçenek olduğunu sayısal değerleri dışlamak istiyor?

Yorumlarınız sonra düzenleyin:

$arr1 = array('key' => 1);
$arr2 = array('test',1 => 'test', 'key2' => 2);

işleme sonra olması sonucu gerekir:

array('key' => 1,'key2' => 2);

Sayısal tuşları hariç

5 Cevap

Bu size array_filter sizin $arr2 'ın anahtarlarını, ilk istediğiniz gibi görünüyor:

function not_numeric( $object ) {
   return !is_numeric( $object );
}


$no_numeric_keys  = array_filter( array_keys( $arr2 ), not_numeric );
$no_numeric_array = array_intersect_keys( $arr2, $no_numeric_keys );
$result           = array_merge( $arr1, $no_numeric_array );

Ben bu işe olacağını tahmin ediyorum, kullandıktan sonra $result = array_merge($arr1,$arr2);:

foreach ($result as $key => $value) {
  if (is_numeric($key)) {
    unset($result[$key]);
  }
}

Edit: In as few lines as possible (1) – as requested in the new title:

foreach ($result as $key => $value) { if (is_numeric($key)) { unset($result[$key]); } }

Her dizi ve testi ile sadece döngü anahtarları dizeleri ise:

$output = array();
foreach($arr1 as $key => $value) {
    if(is_string($key)) {
        $output[$key] = $value;
    }
}
foreach($arr2 as $key => $value) {
    if(is_string($key)) {
        $output[$key] = $value;
    }
}

Edit: Since you said elegant...

function merge_arrays_string_keys()
{
    $output = array();

    foreach(func_get_args() as $arr)
    {
        if(is_array($arr))
        {
            foreach($arr as $key => $value) {
                if(is_string($key) {
                    $output[$key] = $value;
                }
            }
        }
    }

    return $output;
}

zarif, ha?

$test = array('test',  1 => 'test', 'key2' => 2, 33, 3 => 33, 'foo' => 'bar');
$test_non_num = array_intersect_key(
   $test,
   array_flip(
      array_diff(
         array_keys($test),
         array_filter(array_keys($test), 'is_int'))));

print_r($test_non_num); // key2=>2, foo=>bar

Bu kodu kullanın, o da bir şey gerektirir yapacağız.

<?php

$result = array ( 1,"pavunkumar","bks", 123 , "3" ) ;
array_walk($result,'test_print');
print_r ( $result ) ;

function test_print( $val , $key )
{
global $result;
if ( gettype ( $val ) == 'integer' )
{
unset ( $result[$key] ) ;
}
}